允许 System.Windows.Forms.WebBrowser 到 运行 javascript

Allow System.Windows.Forms.WebBrowser to run javascript

说真的 - 在尝试回答之前通读问题。 "Use a different browser" 没有回答这个问题。

问题是这样的:当我无法控制传入页面时,如何让 System.Windows.Forms.WebBrowser 控件显示嵌入了 Javascript 的网页? 我已经看到有人建议为 IE 仿真添加注册表值 (Allowing javascript to run on a windows form web browser) 并更改 Internet 中的脚本设置 Options/Security。

我已经这样做了

所以,这是测试 - 使用 System.Windows.Forms.WebBrowser 控件访问 www.hulu.com。

而且我们仍然得到这个。

还有其他想法吗?

WebBrowser 控件的 属性 ScriptErrorsSuppressed 设置为 true 以抑制 JavaScript 错误消息。


为了允许 hulu.com 上的代码执行,您必须 运行 Web浏览器控件的模式使其 运行 具有较新版本的功能。这只能通过设置注册表项来完成。

详情见this question and the answers


要说明:我有一个演示应用程序,用于打开带有名为 WindowsFormsApplication5.exe.

的嵌入式 WebBrowser 控件的 hulu 网站

在不更改注册表的情况下,我看到 Hulu 的一条说明 JavaScript 支持未启用。使用 Fiddler 嗅探网络传输时,我看到以下请求被发送到 Hulu 服务器:

GET http://www.hulu.com/ HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Accept-Language: de-DE,de;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Creative AutoUpdate v1.41.09)
Host: www.hulu.com
Connection: Keep-Alive
Pragma: no-cache

注意用户代理字符串中的版本号“7.0”。

我现在在 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 中添加一个 REG_DWORD 类型的注册表项,名称为 "WindowsFormsApplication5.exe",值为 0x00002af9 (11001)。

因此,Hulu 网站成功显示在我的演示应用程序中,我看到通过 Fiddler 发送了以下请求:

GET http://www.hulu.com/ HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Referer: http://www.hulu.com/
Accept-Language: de-DE,de;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: www.hulu.com
Connection: Keep-Alive

注意注册表更改后的不同 User-Agent 字符串。


可能的方法:

  • 使用不同的浏览器。 Replacing .NET WebBrowser control with a better browser, like Chrome?

  • 当您的程序启动时,检查注册表以查看 IE 是否配置为允许 Javascript。如果不是,请停止程序或修改注册表。 (这可能会激怒用户或管理员!)

仅在顶部添加此行

this.webBrowser1.ScriptErrorsSuppressed = true;