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

Posted

技术标签:

【中文标题】允许 System.Windows.Forms.WebBrowser 运行 javascript【英文标题】:Allow System.Windows.Forms.WebBrowser to run javascript 【发布时间】:2017-04-16 18:48:15 【问题描述】:

认真 - 在尝试回答之前通读问题。“使用其他浏览器”不能回答这个问题。

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

我已经这样做了

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

而且我们仍然得到这个。

还有其他想法吗?

【问题讨论】:

您不需要使用其他控件。你需要告诉WebBrowser控件不要使用兼容模式,使用最新版本的IE文档模式。然后它很好地显示了所有现代内容。看看this post。 按照说明操作,您可以在 Windows 窗体应用程序like this 中看到预期的结果。 是的。我这样做了。它没有用。 可能您没有正确遵循说明,请仔细阅读我在第一条评论中分享的链接帖子,并且不要忘记添加 yourapp.vshost.exe。您需要更改的唯一键在这里:HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 。解决方案是不使用其他浏览器控件。您可以在第二条评论中看到我在 WebBrowser 控件中从该站点制作的屏幕截图。 我已经重新检查了三遍 - 我完全按照这些说明进行操作。由于它适用于 www.funimation.com 而不是 www.hulu.com,因此该系统上安装的 IE 版本很可能与 Hulu 网站上的某些内容不兼容。稍后我将不得不在我的家用机器上检查这个(Win10 64 位)。 【参考方案1】:

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


为了让 hulu.com 上的代码能够执行,您必须以某种模式运行 Webbrowser 控件,以便它可以使用更新的版本功能运行。这只能通过设置注册表项来完成。

详情请见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 中添加名为“WindowsFormsApplication5.exe”和值为 0x00002af9 (11001) 的 REG_DWORD 类型的注册表项。

结果,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 字符串。


【讨论】:

这不会修复需要 Javascript 的网站的可操作性。它只是隐藏错误消息。 您的扩展答案仍然对我不起作用。我已在 HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION、HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ 中更新了我的应用程序的值MAIN\FeatureControl\FEATURE_BROWSER_EMULATION 和 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION。我仍然收到“您的软件正在阻止 javascript”消息 此方法在 64 位 Windows 7 和 64 位 Windows 10 上失败。 @rlranft 不要将路径与 Wow6432Node 一起使用!我的测试是在 Windows 10 64bit 中进行的。 好的,我把它全部收回。这适用于 www.funimation.com,但不适用于我之前都无法加载的 www.hulu.com。谢谢。【参考方案2】:

可能的方法:

使用其他浏览器。 Replacing .NET WebBrowser control with a better browser, like Chrome?

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

【讨论】:

1) 使用不同的浏览器会破坏问题的目的.... 2) 正如我之前所说的“我已经看到人们建议为 IE 仿真添加注册表值(允许 javascript 在Windows 窗体 Web 浏览器)并更改 Internet 选项/安全中的脚本设置。”和“我已经这样做了。” @rlranft 建议的注册表更改链接到您的问题和我链接到工作的问题。再试一次。 “再试一次......?”什么,他们消失了?在应用这些更改并重新启动相关机器后,我拍摄了这些屏幕截图。这些注册表项和设置仍然有效。 WebBrowser 控件不“模拟” IE - 它 IE。这就是为什么它就从我身边过去了。 WebBrowser 控件是自 IE4 以来一直存在的 ActiveX 控件的丑陋继子(是的,我已经这样做了很长时间)。除了注册表更改之外,没有其他方法可以完成您尝试执行的操作,因为 Javascript 在某些环境中是一个安全问题(想想军事设施或核电站等高安全性场所),这就是为什么 MS 没有选择的原因以编程方式启用它。因此我建议尝试不同的浏览器。 @codenoir 您不需要使用其他控件。你需要告诉WebBrowser控件不要使用兼容模式,使用最新版本的IE文档模式。然后它很好地显示了所有现代内容。看看this post。

以上是关于允许 System.Windows.Forms.WebBrowser 运行 javascript的主要内容,如果未能解决你的问题,请参考以下文章

怎么设置单元格区域不允许用户编辑

访问控制允许方法不允许删除

怎样禁止dataGridview更新,允许插入

允许在 dataGridview 中选择行,但不允许选择单元格

Symfony2 路由:不允许的方法(允许:Method)

允许导航和允许意图之间的区别