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

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

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

【问题讨论】:

    标签: c# internet-explorer browser webbrowser-control internet-explorer-9


    【解决方案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)");
          

          【讨论】:

          • 实际上看起来正在发生这种情况。您可以通过添加注册表值来修复它。 stackoverflow.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 将是另一个。
          猜你喜欢
          • 2011-03-21
          • 2023-03-10
          • 2011-07-20
          • 2011-06-04
          • 1970-01-01
          • 2011-05-05
          相关资源
          最近更新 更多