【问题标题】:Is it possible for the .NET WebBrowser control to use IE9?.NET WebBrowser 控件是否可以使用 IE9?
【发布时间】:2011-03-21 17:37:24
【问题描述】:

我意识到这是一个早期版本并且不稳定。我不希望在任何其他项目中更换 IE9 的默认浏览器控件,但在这种情况下,我特别需要 IE9 来与其他版本进行比较。

我想让 .NET WebBrowser 控件使用 IE9,而不是机器上的默认 IE 版本。我完全控制了这台机器,因此破解系统文件或其他任何可能需要的东西都没有问题。

通常,这可以通过将更新安装到 IE 来实现,但在 IE9 的情况下,它会安装一个单独的应用程序,而不影响当前版本的 IE。这意味着 WebBrowser 控件继续使用当前版本(这是有道理的,并且是 MS 的明智之举,因为 IE9 仍在开发中)。但在我的(边缘)情况下,我需要 WebBrowser 控件才能使用 IE9。

是否可以在 .NET 表单应用程序中嵌入 IE9?

编辑

有了Hans Passant's help,我走得更远了。在 IE9 的 prog 文件目录中发生了一些非常有趣的事情。有一个名为“iepreview.exe.local”的目录,删除后会使 IE9 Preview 应用程序使用 IE8(通过 acid3 测试检查)。

不是我想要的,但我想知道这是否是我可以利用的某种重定向来满足我的需要。

编辑 2

我已经尝试将 .local hack 应用到我的 iexplore.exe 副本和我的 .NET 应用程序中,并且我注意到了另外一些有趣的事情 - 两个应用程序都开始使用 IE7 而不是 IE8(我的 IE 版本)或 IE9。

这可能是 iexplore 尝试使用 IE9 然后又退回到 IE7 吗?看起来很奇怪,它甚至可以使用 IE7,但这是它开始使用的用户代理字符串。

【问题讨论】:

    标签: c# .net internet-explorer com


    【解决方案1】:

    其实你可以修改你的注册表来强制你的程序使用IE9渲染。转到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION 并添加一个新的 DWORD 值,命名为您的程序名称(使用 .exe)并将 十进制 值设置为 9999。


    您还可以修改注册表以强制您的程序使用 IE9 GPU 渲染。转到 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_GPU_RENDERING 并添加一个名为您的程序名称(带有 .exe)的新 DWORD 值,并将 十六进制 值设置为 1。


    这只有在您实际拥有 IE9 时才有效!在执行此操作之前,您必须先下载 IE9,否则它将无法运行。 如果你想用 IE8 渲染页面,只需将 9999 更改为 8888。

    注意:GPU 渲染仅在 IE9 中可用

    【讨论】:

      【解决方案2】:

      IE9 可以并行安装的唯一方法是它为接口和 coclass 使用新的 GUID。这意味着您不能使用 WebBrowser,它具有硬编码的 GUID。

      还有另一种选择,使用 AxHost 包装器。右键单击工具箱,选择项目,选择 COM 组件选项卡并在列表中找到 IE9。不知道它可能叫什么,旧名称是“Microsoft Web Browser”,由 c:\windows\system32\ieframe.dll 提供服务

      您将不得不放弃友好的 WebBrowser 和 HtmlDocument 包装类。

      【讨论】:

      • 我的 IE 平台预览目录没有任何 COM 注册。所有的 DLL 都在 iepreview.exe.local 子目录中,并且那里的 mshtml 有 DllRegisterServer。所以我希望它可以放在适当的位置,甚至只是 regsvred 在它所在的位置,但可能不止于此。
      • 闻起来像无注册的 COM。这确实有道理,但会使您的任务变得更加困难。您必须将所有内容复制到项目的构建目录中。并创建您自己的清单。 Brrr。
      • .local 文件足以让 COM 使用本地 DLL 而不是在注册表中注册的那些。非常便宜的无注册 COM。也适用于您的程序,但您必须将所有 IE9 DLL 复制到您的构建目录。然后 WebBrowser 应该可以工作并使用 IE9。如果不是太不兼容的话。
      • 啊哈,非常感谢。我试了一下,它恢复到 IE7(我的浏览器是 IE8)——有什么想法吗?好像不兼容。
      • 查看我关于如何让 webbrowser weboc 控件使用 IE9 的答案:stackoverflow.com/questions/4612255/…
      【解决方案3】:

      经过大量谷歌搜索后,我发现 32 位和 64 位应用程序的 FEATURE_BROWSER_EMULATION 有两组不同的密钥。您需要根据正在运行的机器将其设置在正确的位置。此外,您还需要确保安装正确版本的要模拟的浏览器。

      32 位:

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\**FEATURE_BROWSER_EMULATION**
      
      Value Key: (DWORD) yourapplication.exe
      

      64 位:

      HKEY_LOCAL_MACHINE\SOFTWARE\**Wow6432Node**\Microsoft\Internet Explorer\MAIN\FeatureControl\**FEATURE_BROWSER_EMULATION**
      
      Value Key: (DWORD) yourapplication.exe 
      

      将此键设置为十进制值(此处取自 MSDN):

      9999 (0x270F) Internet Explorer 9。网页以 IE9 标准模式显示,与 !DOCTYPE 指令无关。

      9000 (0x2328) Internet Explorer 9。包含基于标准的 !DOCTYPE 指令的网页以 IE9 模式显示。

      8888 (0x22B8) 无论 !DOCTYPE 指令如何,网页都以 IE8 标准模式显示。

      8000 (0x1F40) 包含基于标准的 !DOCTYPE 指令的网页以 IE8 模式显示。

      7000 (0x1B58) 包含基于标准的 !DOCTYPE 指令的网页以 IE7 标准模式显示。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-28
        • 1970-01-01
        • 2010-09-15
        • 2011-06-04
        • 1970-01-01
        相关资源
        最近更新 更多