在C#中 webbrowser的使用心得
1.首先是屏蔽浏览器右键菜单的问题,
用以下代码可以让浏览器用自己的右键菜单:
tempbrowser.contextmenustrip = this.contextmenustrip1;
tempbrowser.iswebbrowsercontextmenuenabled = false;
但是很不幸,上面的代码在有的机器上不起作用,开始以为是环境或者流氓插件的问题,折磨了很久无果,后来把.net升级到4.0竟然解决了这个问题,估计就是微软webbrowser控件的问题
2.屏蔽拷贝快捷键和截屏快捷键
public bool prefiltermessage(ref message msg)
{
if (msg.msg == wm_keydown || msg.msg == wm_keyup)
{
stringbuilder sb = new stringbuilder(50);
getclassname(msg.hwnd, sb, 50);
if (sb.tostring().tolower() == "internet explorer_server")
{
if ((control.modifierkeys == keys.control && (((keys)msg.wparam.toint32() & keys.keycode) == keys.c)) || ((keys)msg.wparam.toint32() & keys.keycode) == keys.printscreen || ((keys)msg.wparam.toint32() & keys.keycode) == keys.menu)
{
messagebox.show("当前系统禁止内容复制,如需系统内部复制粘贴,请使用右键菜单的功能!", "屏蔽");
clipboard.setdataobject("null");
return true;
}
}
}
return false;
}
3.解决webbrowser遇到window.open无法打开页面的问题
是因为打开页面的url一般是通过mybrowser.statustext来获取的,但是window.open是无法获取真正的url的,解决办法就是在webbrowser的newwindow事件中特殊处理window.open的事件,获取真正的url地址
webbrowser mybrowser = (webbrowser)sender;
tabpage mypage = (tabpage)mybrowser.parent;
string newurl = "";
string html = mybrowser.document.activeelement.outerhtml;
string pattern = @"<button.*?onclick=.*\('(.*)'\).*";
matchcollection matches = regex.matches(html, pattern, regexoptions.ignorecase);
if (matches.count == 1)
{
match m = matches[0];
group g = m.groups[1];
if (g != null && g.length > 0)
{
string address = mybrowser.url.scheme + "://" + mybrowser.url.host + ":" + mybrowser.url.port + g.tostring();
newurl = address.replace("&", "&");
}
}
newurl = string.isnullorempty(newurl) ? mybrowser.statustext : newurl;
很遗憾这种方法只能适合一页中只有一个window.open的情况,如果有多个window.open,我们可以用下面的方法:在webbrowser的documentcompleted中,if (mybrowser.documenttext.indexof("window.open(") > -1),然后把所有window.open替换为window.location.href。但是后来发现系统执行过这个过程之后,webbrowser的url会变成原来的url,不知道有没有朋友能知道为什么。
4.屏蔽webbrowser拖拽网页内容到外部word等的问题
private void tempbrowser_documentcompleted(object sender, webbrowserdocumentcompletedeventargs e)
{
webbrowser tempbrowser = (webbrowser)sender;
tempbrowser.parent.text = tempbrowser.documenttitle;
htmlelement ele = tempbrowser.document.createelement("script");//新增
ele.setattribute("type", "text/javascript");
ele.setattribute("text", "document.body.ondragstart=function(){window.event.returnvalue=false;};");
tempbrowser.document.body.appendchild(ele);
}
推荐阅读
-
在C#及.NET框架中使用StringBuilder类操作字符串的技巧
-
在PYQT5中QscrollArea(滚动条)的使用方法
-
关于C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用介绍方法
-
C#使用linq语句查询数组中以特定字符开头元素的方法
-
HTML5中微数据概述及在搜索引擎中的使用举例
-
在c#中使用servicestackredis操作redis的实例代码
-
HighCharts图表控件在ASP.NET WebForm中的使用总结(全)
-
C#中HashTable的定义与使用方法
-
在android开发中尽量不要使用中文路径的问题详解
-
在C#程序中对MessageBox进行定位的方法