在C#中 webbrowser的使用心得
发布时间:2023-12-10 12:57:00
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);
}


猜你喜欢
- 一、平衡二叉树的定义平衡二叉树是一种二叉排序树,其中每一个节点的左子树和右子树的高度差至多等于1 。它是一种高度平衡的二叉排序树。意思是说,
- 现在网上很多应用都是用二维码来分享网址或者其它的信息。尤其在移动领域,二维码更是有很大的应用场景。因为项目的需要,需要在网站中增加一个生成二
- 效果图如下:1.适用需求后台生成验证码,用于登陆验证。2. 功能实现所需控件/文件:无(普通标签)3.功能点实现思路1)前台思路:(1)前台
- 前言 Spring中最重要的概念IOC和AOP,实际围绕的就是Bean的生成与使用。什么叫做Bean呢?
- 一、递归概念递归本质:程序调用自身的编程技巧叫做递归。程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言
- 项目中需求,要做条目条目拖拽删除效果,实际效果和QQ消息删除一样,侧滑有制定和删除。效果图第一步效果图1.0自定义控件 SwipeLayou
- 答案是能!松哥之前写过类似的文章,但是主要是讲了用法,今天我们来看看原理!本文基于当前 Spring Security 5.3.4 来分析,
- 本文实例讲述了Spring Bean的初始化和销毁。分享给大家供大家参考,具体如下:一 点睛在开发过程中,经常遇到在Bean使用之前或者之后
- 1.创建阻塞的服务器当 ServerSocketChannel 与 SockelChannel 采用默认的阻塞模式时,为了同时处理多个客户的
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 什么是POM?POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做p
- 前一段时间粗略看了一下《深入Java虚拟机 第二版》,可能是因为工作才一年的原因吧,看着十分的吃力。毕竟如果具体到细节的话,Java虚拟机涉
- 第一次进入应用的时候,都会有一个引导页面,引导页面的实现起来也很简单,实现的方式也有很多,下面是自己写的一个引导页面的效果,大致的实现思路为
- 1、ThreadLocal 使用原理前文我们讲过ThreadLocal的主要用途是实现线程间变量的隔离,表面上他们使用的是同一个Thread
- 具体代码如下所示;<!-- 第一种打包方式 (maven-jar-plugin), 将依赖包和配置文件放到jar包外 -->&l
- 我们用NuGet还原.NET Core项目会报以下错误:error NETSDK1064: 未找到版本为 1.8.2 的包 BouncyCa
- Java语言是SUN(Stanford University Network,斯坦福大学网络公司)公司1995年推出的一门高级编程语言,起初
- 首先,我们需要增加用户对该脚本的执行权限,即 String cmdstring = "chmod a+x test.sh
- 01.点明观点C#中,非托管资源使用之后必须释放,而using()是使用非托管资源的最佳方式,可以确保资源在代码块结束之后被正确释放,并且代
- 如果 d:\upload\file\ 文件夹不存在,会报错String strPath = "d:\\upload\\file\\