欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

在C#中 webbrowser的使用心得

时间:2021-10-21 09:11:12|栏目:.NET代码|点击:

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

上一篇:C#数组中List, Dictionary的相互转换问题

栏    目:.NET代码

下一篇:如何清空文件夹里面的所有文件和文件夹

本文标题:在C#中 webbrowser的使用心得

本文地址:http://www.codeinn.net/misctech/180772.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有