在程序中要显示一个网页或者啥的的时候,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.