zoukankan      html  css  js  c++  java
  • webbrowser使用心得

    最近用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("&amp;", "&");
                    }
                }
                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);
     }

    还有几个参考网站送给大家做参考:

    http://www.codeproject.com/Articles/13598/Extended-NET-2-0-WebBrowser-Control

    http://www.cnblogs.com/chenou/articles/1163779.html

    http://www.cnblogs.com/dlwang2002/archive/2007/04/14/713499.html

  • 相关阅读:
    Java集合学习(8):LinkedList
    Java集合学习(7):ArrayList
    Java集合学习(6):LinkedHashSet
    数据结构与算法19—排序
    ZooKeeper基本介绍
    Java集合学习(5):LinkedHashMap
    Java集合学习(4):HashTable
    Java集合学习(3):HashSet
    java集合学习(2):Map和HashMap
    HTML DOM的创建,删除及替换
  • 原文地址:https://www.cnblogs.com/vagerent/p/2512872.html
Copyright © 2011-2022 走看看