在C#中webbrowser的使用心得
1.首先是屏蔽浏览器右键菜单的问题,
用以下代码可以让浏览器用自己的右键菜单:
tempBrowser.ContextMenuStrip=this.contextMenuStrip1;
tempBrowser.IsWebBrowserContextMenuEnabled=false;
但是很不幸,上面的代码在有的机器上不起作用,开始以为是环境或者流氓插件的问题,折磨了很久无果,后来把.net升级到4.0竟然解决了这个问题,估计就是微软webbrowser控件的问题
2.屏蔽拷贝快捷键和截屏快捷键
publicboolPreFilterMessage(refMessagemsg)
{
if(msg.Msg==WM_KEYDOWN||msg.Msg==WM_KEYUP)
{
StringBuildersb=newStringBuilder(50);
GetClassName(msg.HWnd,sb,50);
if(sb.ToString().ToLower()=="internetexplorer_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");
returntrue;
}
}
}
returnfalse;
}
3.解决webbrowser遇到window.open无法打开页面的问题
是因为打开页面的url一般是通过myBrowser.StatusText来获取的,但是window.open是无法获取真正的url的,解决办法就是在webbrowser的NewWindow事件中特殊处理window.open的事件,获取真正的url地址
WebBrowsermyBrowser=(WebBrowser)sender;
TabPagemypage=(TabPage)myBrowser.Parent;
stringNewURL="";
stringhtml=myBrowser.Document.ActiveElement.OuterHtml;
stringpattern=@"<button.*?onclick=.*\("(.*)"\).*";
MatchCollectionmatches=Regex.Matches(html,pattern,RegexOptions.IgnoreCase);
if(matches.Count==1)
{
Matchm=matches[0];
Groupg=m.Groups[1];
if(g!=null&&g.Length>0)
{
stringaddress=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等的问题
privatevoidtempBrowser_DocumentCompleted(objectsender,WebBrowserDocumentCompletedEventArgse)
{
WebBrowsertempBrowser=(WebBrowser)sender;
tempBrowser.Parent.Text=tempBrowser.DocumentTitle;
HtmlElementele=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);
}
相关文章
- 【错误记录】Visual Studio 2019 中运行 Unity C# 脚本时报错 ( 根据解决方案, 可能需要安装额外的组件才能获得 | .NET 桌面开发 | 使用 Unity 的游戏开发 )
- C#面向对象概述
- asp.net(c#)使用Rex正则来生成字符串数组的代码
- 使用C#处理WebBrowser控件在不同域名中的跨域问题
- C#可选参数的相关使用
- C#中使用IrisSkin2.dll美化WinForm程序界面的方法
- 深入解析c#中枚举类型的定义与使用
- c#的params参数使用示例
- C#获取图片文件扩展名的方法
- C#串口通信实现方法
- C#关于System.Collections空间详解
- C#中String与string的区别分析
- C#实现Datatable排序的方法