VS C# .NET WebBrowser控件 利用插入JS代码,实现控制弹出IE窗口
2015-09-11 00:00
1131 查看
最近在做一个客户端程序,使用到自带的WebBrowser控件时,发现当JS调用window.open()或a标签的target="_blank"时使用的是弹出IE窗口,不知道为什么是这种设计,根本不满足需求嘛。上网查了一下相关资料,发现这个控件并没有属性能控制这个功能,于是找第三方控件,发现也还是不行(可能是我不够仔细尝试),而且要多出个几十兆的DLL。经过我几个小时的努力,放弃了。。。!
知道C#是可以与网页的JS交互的,于是想到网页上重写window.open()的方法,建一个HTML页面试一下,证实JS重写window.open()的可能,JS代码:
试运行,成功被重写了。
由于网页我是不能更改的,于是参考到C# WebBrowser执行JS代码的方法:
一切OK,但有一个问题,就是这个方法使用到IHTMLDocument2,需要引用Microsoft.mshtml.dll,这个dll是自带的,位置一般在 C:\Program Files\Microsoft.NET\Primary Interop Assemblies,有近8M,我当然不能忍啊,于是继续在这条路上越走越深。
是后使用了不需要引用外部dll的方法,直接用HtmlDocument就可以的:
当然你也将JS可以写成方法,然后用 doc.InvokeScript()调用,这里我就不管了。
这时又有一个问题,这个代码时在当前的Document有效,也就是说HTML里面的iframe包含的HTML并不会生效,解决:
如果多个iframe的话遍历一下就好了。
最后再把a标签的target改一下就好了,终于完成了,这里记录分享一下~
转载请尊重原创,OK?
知道C#是可以与网页的JS交互的,于是想到网页上重写window.open()的方法,建一个HTML页面试一下,证实JS重写window.open()的可能,JS代码:
window.open=function(url){window.location.href=url;}
试运行,成功被重写了。
由于网页我是不能更改的,于是参考到C# WebBrowser执行JS代码的方法:
IHTMLDocument2 doc2 = (IHTMLDocument2)webBrowser1.Document.DomDocument; doc2.parentWindow.execScript("window.open=function(url){window.location.href=url;}");
一切OK,但有一个问题,就是这个方法使用到IHTMLDocument2,需要引用Microsoft.mshtml.dll,这个dll是自带的,位置一般在 C:\Program Files\Microsoft.NET\Primary Interop Assemblies,有近8M,我当然不能忍啊,于是继续在这条路上越走越深。
是后使用了不需要引用外部dll的方法,直接用HtmlDocument就可以的:
HtmlDocument doc = webBrowser1.Document; HtmlElement script = doc.CreateElement("script"); script.SetAttribute("type", "text/javascript"); script.SetAttribute("text", "window.open=function(url){window.location.href=url;}"); doc.Body.AppendChild(script);
当然你也将JS可以写成方法,然后用 doc.InvokeScript()调用,这里我就不管了。
这时又有一个问题,这个代码时在当前的Document有效,也就是说HTML里面的iframe包含的HTML并不会生效,解决:
//上面的doc改成: doc = webBrowser1.Document.Window.Frames["iframe的name"].Document;
如果多个iframe的话遍历一下就好了。
最后再把a标签的target改一下就好了,终于完成了,这里记录分享一下~
转载请尊重原创,OK?
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#生成饼形图及添加文字说明实例代码
- C#判等对象是否相等的方法汇总
- C#简单的向量用法实例教程
- C#实现基于链表的内存记事本实例
- C#托管堆对象实例包含内容分析
- RabbitMQ入门与使用篇 推荐