使用 IE9 的 WebBrowser 控件

Posted

技术标签:

【中文标题】使用 IE9 的 WebBrowser 控件【英文标题】:WebBrowser control to use IE9 【发布时间】:2011-07-28 17:40:13 【问题描述】:

我希望 WebBrowser 控件使用 IE9。电脑上安装了IE9,但是WebBrowser控件还在用IE8。

我通过http://www.whatbrowser.org/en/ 进行了验证。我尝试对注册表进行一些更改(在此处找到了解决方案)但无法正常工作。

【问题讨论】:

【参考方案1】:

看来这可能是您的页面检测脚本。试试这个site (http://www.whatismybrowser.com/)。我知道其他网站给了我错误的信息,但是这个网站正确地将浏览器识别为我机器上安装的 IE 版本。

【讨论】:

【参考方案2】:

您可以尝试添加注册表值,告知您希望为您的应用程序运行的 IE 版本的 WebBrowser 控件。

我有类似的问题 - more here

【讨论】:

【参考方案3】:

html 头部使用这个:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

否则:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION\yourexename.exe - REG_DWORD = 9000 (十进制)

【讨论】:

【参考方案4】:

我认为是传递给站点的用户代理字符串。它错误地将其识别为 IE8,因为它可能不符合其逻辑中与 IE9 匹配的要求。我可以看到我的盒子也发生了同样的事情。如果需要,您可以指定要使用的用户代理字符串。将此添加到您的项目中

在你的 using 语句中添加 ...

using System.Runtime.InteropServices;

在您的表单类中添加 ....

[DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
private static extern int UrlMkSetSessionOption(int dwOption, string pBuffer, int dwBufferLength, int dwReserved);
const int URLMON_OPTION_USERAGENT = 0x10000001;

public void ChangeUserAgent(String Agent)

    UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, Agent, Agent.Length, 0);

然后在你的代码中的某个地方调用它......也许是构造函数,或者 form_load 事件。

ChangeUserAgent("Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");

【讨论】:

实际上看起来正在发生这种情况。您可以通过添加注册表值来修复它。 ***.com/questions/4612255/… 谢谢 - 由用户代理更改版本 - 但控件的行为类似于 ie8 或 7 - 因为它无法使用 HTML5 功能,如果我在独立 IE9 上测试,则可以正常工作。 就像我在我的帖子的评论中所说的那样,我相信 is 实际上不是用户代理字符串,而是 WebBrowser 控件默认为 IE7 呈现模式这一事实,除非您通过注册表设置另有说明. 执行此操作以始终打开 IE9 标准模式并启用 GPU 加速。 Make a DWORD value under HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION. Set the key as YourAppName.exe. Set the value as 39321. Make a DWORD value under HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_GPU_RENDERING. Set the key as YourAppName.exe. Set the value as 1【参考方案5】:

浏览器谎称他们的“用户代理”是为了让网站休息一下。您正在运行 9,除非您使用测试版,否则不能同时安装 8 和 9。有关用户代理字符串的详细信息,请参阅此blog post。

如果您想确定然后查看加载的 DLL 版本。项目+属性,调试,勾选“非托管代码调试”。启动您的程序,Debug + Break All。 Debug + Windows + Modules 并在列表中找到 ieframe.dll。版本号栏应该告诉你。我得到的是 Win7 发行版“8.00.7600.16385 (win7_rtm.090713-1255)”。我还没有安装 IE9。

【讨论】:

如果我使用真正的浏览器会正确显示 IE9,如果我使用 webbrowser 组件则会显示 IE8。我知道什么是,以及如何使用用户代理。 IE浏览器IE9包含所有以前的版本,用于兼容模式,并且webbrowser组件使用IE8,即使在注册表中我将“功能浏览器仿真”设置为IE9也使用浏览器我没有javascript错误并且使用webbrowser组件我有 javascript 错误 感谢您的回答。您能否更详细地解释一下操作:“调试 + Windows + 模块并在列表中找到 ieframe.dll。”我找到了其他 *.dll,但没有找到 ieframe.dll。我尝试用一​​个非常简单的代码进行测试: private void button1_Click(object sender, EventArgs e) webBrowser1.Navigate("whatbrowser.org/en/"); 强烈信号表明您已加载 IE9。 mshtml.dll 将是另一个。

以上是关于使用 IE9 的 WebBrowser 控件的主要内容,如果未能解决你的问题,请参考以下文章

安装 IE9 后使用 WebBrowser 控件的应用程序崩溃

怎样把WebBrowser控件放到IE9成标准?

WebBrowser(超文本浏览框)控件默认使用IE9,IE10的方法

WebBrowser 控件和 JavaScript 错误

WebBrowser 控件不呈现某些页面

Web 浏览器控件中的文档模式菜单功能