【问题标题】:Will the IE9 WebBrowser Control Support all of IE9's features, including SVG?IE9 WebBrowser 控件是否支持 IE9 的所有功能,包括 SVG?
【发布时间】:2011-06-04 11:28:28
【问题描述】:

我最近升级到了 IE9-beta。现在,在我的 .Net (3.5) WinForm 应用程序中,我想使用 WebBrowser 控件。

所以我的问题是,WebBrowser 控件是否会展示 IE9 的所有属性和功能?

我担心的是,我想在上面渲染一些 SVG 图形。

【问题讨论】:

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


    【解决方案1】:

    只是为了完整......

    对于 32 位操作系统,您必须将注册表项添加到:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
    

    *******或*******

    对于 64 位操作系统,您必须将注册表项添加到:

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
    

    该条目必须是DWORD,名称是您的可执行文件的名称,它承载了Webbrowser 控件;即:

    myappname.exe(不要使用 MSDN 网页中的“Contoso.exe”...它只是一个占位符名称)

    然后根据上表给它一个DWORD 值:

    http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation

    我更改为十进制 11001 或十六进制 0x2AF9 ---(IE 11 EMULATION),因为这不是默认值(如果您安装了 IE 11 或任何版本)。

    该 MSDN 文章包含有关影响 Internet Explorer Web 浏览器行为的其他几个注册表更改的注释。

    【讨论】:

    • DWORD 部分非常重要。 QWORD 不会工作,很容易犯这个错误。
    • 我要补充一点,当你在 VS 下调试时,你还应该为 myappname.vshost.exe 添加一个条目。另一方面,我怀疑简单地从调试器中启动应用程序然后在调试器中也可以解决问题。我认为它对我有用一次;但我不是 100% 确定。
    • 由于我的 IE11 配置,我需要打开 IE11 并将目标 URL 添加到我的受信任站点。没有这个,即使我的注册表配置正确,页面脚本也不会运行。
    【解决方案2】:

    我知道这个帖子很旧,并且已经有全面的答案。

    以防万一你不知道:

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

    您不必将 IE 版本号硬编码为

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

    【讨论】:

    • 这与问题无关 - WebBrowser 控件仅在 IE7 模式下加载,除非使用特定程序的注册表设置覆盖。
    • @Christian 你确定吗?据我所知,如果网页的标题中包含<meta http-equiv="X-UA-Compatible" content="IE=edge" >,则 webBrowser 将以最新的 IE 模式加载。为什么有 90 多票赞成 mikel 的回答?因为他的解决方案有效。如果可以更改网页,则无需更改注册表。
    • 我 100% 肯定,但我认为这也取决于网站位置。我一直在加载本地内容,版本让步的唯一方法是通过注册表。相信我,我会放弃注册表解决方案以换取其他任何有效的方法,但似乎没有其他方法有效。
    • ie=edge 为我工作,无需我接触注册表。谢谢!
    • @Christian 这确实与问题有关-解决方案效果很好。
    【解决方案3】:

    我遇到了同样的问题,这里的注册表答案不起作用。

    我的程序的新版本中有一个浏览器控件,它在 XP 上运行良好,在 Windows 7(64 位)上失败。 旧版本可在 XP 和 Windows 7 上运行。

    浏览器中显示的网页使用了一些奇怪的插件来显示旧的 SVG 地图(我认为它是一个 Java 小程序)。

    原来问题与 Windows 7 中的 DEP 保护有关。

    dotnet 2 的旧版本没有在 exe 中设置 DEP 所需标志,但从 dotnet 2、SP 1 开始,它确实设置了(是的,exe 的编译行为以及因此的运行时行为会根据您编译的机器而改变, 好的 ...)。

    它记录在 MSDN 博客 NXCOMPAT and the C# compiler 上。引用:这无疑会让一些开发人员感到惊讶...下载框架服务包,重新编译,运行您的应用程序,您现在会遇到 IP_ON_HEAP 异常。

    在 Visual Studio 的后期构建中添加以下内容,关闭 exe 的 DEP,一切都按预期工作:

    all "$(DevEnvDir)..\tools\vsvars32.bat"
    editbin.exe /NXCOMPAT:NO "$(TargetPath)"
    

    【讨论】:

      【解决方案4】:

      关于白鹰接受的答案。 我只是想增加一点动手经验。只是想添加一个 cmets,但 SO 抱怨它太长了。

      基本上,如果没有安装 IE 9,注册表开关 FEATURE_BROWSER_EMULATION 将根本不起作用。

      例如,今天我自己的经验是我试图让 .net webcontrol 在 IE10 模式下工作,因为我尝试渲染的一个 html 在 VS2012 下无法与 .netControl 一起工作,甚至在我加载html 到 IE8 直接,仍然 css 不会正确呈现(即使我说允许被阻止的内容)。但是我在朋友的win 8机器上用IE10测试了同样的html ok。这就是为什么我试图将 .net webControl 设置为 IE 10 模式但总是失败......

      现在我认为这是因为我的 win 7 机器只安装了 IE8,所以无论我为 FEATURE_BROWSER_EMULATION 开关设置哪个值(值设置为 IE9,IE10 IE11),它根本无法工作!

      然后我在我的 win 7 机器上下载并安装了 IE 10。仍然无法正常工作,然后我添加了 FEATURE_BROWSER_EMULATION,它开始工作了!

      我还注意到,无论我设置哪个值,甚至默认将其设置为 0,webControl 仍在使用 IE 10 模式,这对我仍然有效。

      总结一下, 如果您安装了 IE X,但希望您的 .Net webControl 在 IE (X+N) N>0 modo 下工作,两件事您需要做:

      1. 转到 MS 网站并在您的计算机上下载并安装 IE (X+N), 安装后需要重启。

      2. 应用白鹰的答案。

      基本上: 要使用注册表控制此功能的值,请将可执行文件的名称添加到以下设置中,并将值设置为与所需设置相匹配。

      HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
         SOFTWARE
            Microsoft
               Internet Explorer
                  Main
                     FeatureControl
                        FEATURE_BROWSER_EMULATION
                           contoso.exe = (DWORD) 00009000
      

      Windows Internet Explorer 8 及更高版本。 FEATURE_BROWSER_EMULATION 功能定义了 Internet Explorer 的默认模拟模式,并支持以下值。

      值说明

      • 11001 (0x2AF9 Internet Explorer 11. 网页在 IE11 中显示 边缘模式,与 !DOCTYPE 指令无关。

        11000 (0x2AF8) IE11。包含基于标准的 !DOCTYPE 的网页 指令以 IE11 边缘模式显示。 IE11 的默认值。

        10001 (0x2711) Internet Explorer 10。网页在 IE10 中显示 标准模式,与 !DOCTYPE 指令无关。

        10000 (0x02710) Internet Explorer 10. 包含的网页 基于标准的 !DOCTYPE 指令显示在 IE10 标准中 模式。 Internet Explorer 10 的默认值。

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

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

        重要在 Internet Explorer 10 中,包含 基于标准的 !DOCTYPE 指令显示在 IE10 标准中 模式。

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

        8000 (0x1F40) 包含基于标准的 !DOCTYPE 指令的网页 以 IE8 模式显示。 Internet Explorer 8 的默认值 重要事项 在 Internet Explorer 10 中,包含 基于标准的 !DOCTYPE 指令显示在 IE10 标准中 模式。

        7000 (0x1B58) 包含基于标准的 !DOCTYPE 指令的网页 以 IE7 标准模式显示。应用程序的默认值 托管 WebBrowser 控件。

      完整参考here

      【讨论】:

      • without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL. - 这是错误的。我只安装了IE8,我可以完美地使用开关将浏览器设置为不同的渲染模式。
      • 我已经尝试安装 IE8 试图获得 IE10 模式,根本无法工作!刚刚又试了,还是不行
      【解决方案5】:

      我喜欢下面的 (C#) 代码,它为您的应用设置注册表设置。不确定它是否会在安装后切断它,但如果需要权限。对我来说,它解决了 WebSocket 在 WPF 中的 WebBrowser 控件中不可用的问题。

      C# webbrowser Ajax call

      【讨论】:

        【解决方案6】:

        我找到了这个解决方案,但它对我不起作用!因为我使用的是 64 位,所以我不得不更换注册表:

        HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
        

        而不是每个人都在谈论的那个:

        [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
        

        【讨论】:

          【解决方案7】:

          WebBrowser 控件将使用您安装的任何版本的 IE,但出于兼容性原因,它将默认以 IE7 标准模式呈现页面。

          如果您想利用新的 IE9 功能,您应该在 HTML 页面的 <head> 标记内添加元标记 <meta http-equiv="X-UA-Compatible" content="IE=9" >

          此元标记必须添加到 CSS、JavaScript 文件等的任何链接之前,这些链接也位于您的 <head> 中才能正常工作(只有其他 <meta> 标记或 <title> 标记可以在它之前)。

          另一种方法是将注册表项添加到:

          HKLM > 软件 > Microsoft > Internet Explorer > Main > FeatureControl > FEATURE_BROWSER_EMULATION

          并在其中添加值为“9000”的“myApplicationName.exe”,以强制 WebBrowser 控件以 IE9 模式显示页面。虽然也有other values you can use too,但请注意,这些文档并不完全准确,因为无论您使用什么值,似乎都不可能让页面在 IE 8 模式下呈现。

          将注册表项添加到 HKCU 中的同一路径而不是 HKLM 也可以 - 这很有用,因为写入 HKLM 需要管理员权限,而 HKCU 不需要。

          【讨论】:

          • content 部分的不同值可以在这里找到:msdn.microsoft.com/en-us/library/ie/ms533876(v=vs.85).aspx
          • 如果此设置可以存储在 CSS 文件中,我会更高兴。现在我必须浏览许多文档,还是 Visual Studio 中有多行搜索和替换功能?
          • 我尝试了元标记,但它不起作用。我收到一条错误消息,指出“HTML1115: X-UA-Compatible META tag ('IE=9') 由于文档模式已完成而被忽略。”,这导致我进入网页 evolpin.wordpress.com/2011/02/25/…。解决方案是确保元标记是 块内的第一个元素。
          • 请注意,如果您在 64 位 Windows 上运行 32 位应用程序(调用 32 位 MSIE),则应将注册表项添加到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\改为 Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION。
          • 我正在通过 xsl/xslt 渲染 html,而 regedit 出于某种原因无法正常工作... meta 成功了。谢谢!
          【解决方案8】:

          关于 64 位 Windows 的注释似乎让一些人感到困惑。 如果您的应用在 64 位 Windows 下运行,您可能需要在 [HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION] 下设置 DWORD。

          【讨论】:

            【解决方案9】:

            我完全同意所提供的解决方案,但我认为一点澄清很重要,我认为可能是必要的。

            对于需要使用提供的值添加 DWORD 的每个进程(另请阅读:vshost.exe、yourWinformApplication.exe.svchost 或您的 application.exe 的名称),在我的情况下,我留下 9000(十进制) 在应用程序名称中并运行平稳且无错误的脚本。

            最常见的错误是认为有必要按原样添加“contoso.exe”并认为一切正常!

            【讨论】:

              【解决方案10】:

              WebBrowser控件的IE9“版本”和IE8版本一样,实际上是几个浏览器合二为一。与 IE8 版本不同,您可以通过更改 doctype 对页面内的呈现模式进行更多控制。当然,要更改浏览器模式,您必须像之前的答案一样设置注册表。这是 FEATURE_BROWSER_EMULATION 的 reg 文件片段:

              Windows Registry Editor Version 5.00
              
              [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
              "contoso.exe"=dword:00002328
              

              这是完整的代码集:

              • 9999 (0x270F) - Internet Explorer 9。 网页在IE9中显示 标准模式,无论 !DOCTYPE 指令。
              • 9000 (0x2328) - Internet Explorer 9. 包含基于标准的 !DOCTYPE 的网页 指令以 IE9 模式显示。
              • 8888 (0x22B8) - 网页是 以 IE8 标准模式显示, 无论 !DOCTYPE 指令如何。
              • 8000 (0x1F40) - 网页包含 基于标准的 !DOCTYPE 指令 以 IE8 模式显示。
              • 7000 (0x1B58) - 网页包含 基于标准的 !DOCTYPE 指令 以 IE7 标准模式显示。

              完整文档:

              http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation

              【讨论】:

              • 安装 IE 9 后,似乎无法在 IE 8 模式下呈现页面。将值设置为 7000 将进入 IE 7 模式,而 8000/8888/9000/9999 将其设置为 IE 9 模式。这是某种错误还是故意的,我不知道。
              • 我必须将密钥添加到 current_user 和 local_machine 才能开始为我工作。但后来成功了。
              • 这篇博文weblog.west-wind.com/posts/2012/feb/15/… 提到,注册表项将根据 32 位或 64 位 Windows 的不同而有所不同。 32 位 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION 和 64 位 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
              【解决方案11】:

              谢天谢地,我找到了这个。以下是极其重要的:

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

              没有这个,我生成的所有报告都无法在安装 IE9 后工作,尽管在 IE8 中运行良好。它们会在 Web 浏览器控件中正确显示,但是当我调用 .Print() 时,会出现字母丢失、空格被抬高等情况。它们只是基本的 HTML,即使在 Mosaic 中也应该能够呈现。呵呵 不知道为什么 IE7 兼容模式会变得混乱。值得注意的是,您可以 .Print() 5 次相同的页面,并且每次都缺少不同的字母。它甚至会延续到 PDF 输出中,所以它绝对是浏览器。

              【讨论】:

                【解决方案12】:

                是的,WebBrowser 控件使用您安装的任何版本的 IE。这当然意味着,如果您在装有 IE 8 的机器上运行您的应用程序,那么您所依赖的 IE 9 功能将不可用。

                【讨论】:

                • 再次阅读我的答案。反对票是不必要的。我说如果他尝试使用 IE9 功能然后部署到没有 IE9 的机器上,这些功能将无法工作。您的向后兼容性注册表设置不会改变这一事实。
                • 您的第一句话显然是错误的。你的第二句话,至少既明显又懒惰。顺便说一句,感谢您的报复性投票。非常成熟。
                • WebBrowser 控件确实使用安装的任何版本的 IE;但是检测脚本可能没有意识到这一点。试试这个[站点(whatismybrowser.com/)][1]。我知道其他站点给了我错误的信息,但是这个站点正确地将浏览器识别为我机器上安装的 IE 版本。[1]:whatismybrowser.com
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-03-21
                • 2011-07-25
                • 2011-07-28
                • 1970-01-01
                相关资源
                最近更新 更多