zl程序教程

您现在的位置是:首页 >  后端

当前栏目

在C#中webbrowser的使用心得

c# 使用 心得 webBrowser
2023-06-13 09:14:49 时间

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);
 }