文档章节

VS C# .NET WebBrowser控件 利用插入JS代码,实现控制弹出IE窗口

你敲代码像cxk
 你敲代码像cxk
发布于 2015/09/11 11:35
字数 505
阅读 2349
收藏 1

最近在做一个客户端程序,使用到自带的WebBrowser控件时,发现当JS调用window.open()或a标签的target="_blank"时使用的是弹出IE窗口,不知道为什么是这种设计,根本不满足需求嘛。上网查了一下相关资料,发现这个控件并没有属性能控制这个功能,于是找第三方控件,发现也还是不行(可能是我不够仔细尝试),而且要多出个几十兆的DLL。经过我几个小时的努力,放弃了。。。!

知道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?

© 著作权归作者所有

你敲代码像cxk

你敲代码像cxk

粉丝 11
博文 31
码字总数 9713
作品 0
深圳
高级程序员
私信 提问
c#(wpf)中WebBrowser拖动来移动窗口,改变窗口位置

前言 wpf中的WebBrowser相比之前的winform阉割了不少东西,也增加了不少东西,但是msdn对wpf也没有较好的文档 WebBrowser可以说是一个.NET控件,相对于WPF中的控件,不在同一线程,它们不可重...

白超华
01/10
0
0
记WinForm中WebBrowser相关的俩个问题

问题一:如何不让WebBrowser中弹出“安全警告” 当链接https网址时,IE会自动弹出上图中的窗口。 关闭窗口的具体思路如下: 使用WebBrowser加载中/加载完毕后触发的事件处理程序,在处理程序...

zad15c
05/22
0
0
javascript与c#相互调用

首先建立网页: 二、建立Windows应用程序 创建Windows应用程序项目 在Form1窗体中添加WebBrowser控件 在Form1类的上方添加 [System.Runtime.InteropServices.ComVisibleAttribute(true)] 这是...

crossmix
2015/04/16
190
0
WEB 打印的相关技术分析

文/谢康 做Web开发的人员一定都会面临一个共同的难题,那就是打印。的确,相对于Windows桌面应用程序来讲,Web应用程序的打印有种种限制,技术人员在项目开发过程中经常会遇到用户这样或那样...

晨曦之光
2012/03/09
361
0
WebBrowser(WebView) API (浏览器控件WebView)

一、WP8中的WebBrowser Windows Phone 提供基于桌面浏览器的 WebBrowser 控件。Windows Phone OS 7.1 的 WebBrowser 控件基于 Internet Explorer 9,且 Windows Phone 8 的 WebBrowser 控件基......

失足处男的倒霉孩子
2013/12/27
7.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
13
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
12
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
12
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部