使WebBrowser控件使用IE10核心

在程序中要显示一个网页或者啥的的时候,WebBrowser控件很好用。但是这东西似乎不会随着你IE的升级而升级,而是一直使用IE6核心。

比如今天群里在传一个无聊的网站 http://orteil.dashnet.org/experiments/cookie/ 简单说就是不停点鼠标。然后我就要搞个作弊器,运行脚本直接变更那个Cookie数。简单的办法就是拖一个WebBrowser控件,然后使用这样的代码修改数目:

webBrowser1.Navigate("javascript:function Hack(a) {Cookies+=a;}Hack(10000);");
 

但是发现一个问题,就是WebBrowser控件打开网页的时候老是报错,但是用IE开却不会。我系统里装的是IE10,我觉得WebBrowser在使用IE6内核。

上网搜索关键字“WebBrowser C# IE10”以后出来了一个StackOverflow的网页,原来是在注册表里面添加一个键值就好了。

FEATURE_BROWSER_EMULATION "myAppName.exe"=10000 (or 0x02710) and not 1000.
In HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
and HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

It works for me
 

然后我顺便把如何删除这样字符串值的注册表文件内容贴出来。用

Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION\HackCookies.exe]
 

是不行的。要这样:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION]
"HackCookies.exe"=-

 

注意:VS里面调试的话,EXE文件名是HackCookies.vshost.exe。

 

然后注入脚本方面,网上找到这样的方法

HtmlDocument doc = browser.Document;
HtmlElement head = doc.GetElementsByTagName("head")[0];
HtmlElement s = doc.CreateElement("script");
s.SetAttribute("text","alert('hello');");
head.AppendChild(s);

(tested in .NET 4 / Windows Forms App)
 

或者还有这样的

Here is the easiest way that I found after working on this:
string jCode = "alert("Hello");"
// or any combination of your JavaScript commands
// (including function calls, variables... etc)

// WebBrowser webBrowser1 is what you are using for your web browser
webBrowser1.Document.InvokeScript("eval", new object[] { jCode });

What global JavaScript function eval(str) does is parses and executes whatever is written in str. Check w3schools ref here.
 

发表评论