IE9 WebBrowser控件是否支持IE9的所有功能,包括SVG?

时间:2011-01-06 06:08:55

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

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

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

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

12 个答案:

答案 0 :(得分:125)

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

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

此元标记必须先添加到<head>中的CSS,JavaScript文件等任何链接,以便正常工作(只有其他<meta>标记或<title>标记可以来吧)。

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

  

HKLM&gt;软件&gt;微软&gt; Internet Explorer&gt;主要&gt; FeatureControl&gt; FEATURE_BROWSER_EMULATION

在那里添加值为'9000'的'myApplicationName.exe'以强制WebBrowser控件以IE9模式显示页面。虽然还有other values you can use too,但请注意这些文档并不完全准确,因为无论您使用何种值,都无法在IE 8模式下呈现页面。

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

答案 1 :(得分:81)

WebBrowser控件的IE9“版本”,就像IE8版本一样,实际上是几个浏览器中的一个。与IE8版本不同,您可以通过更改doctype来更好地控制页面内的呈现模式。当然,要更改浏览器模式,您必须像早期的答案一样设置注册表。这是FEATURE_BROWSER_EMULATION的注册文件片段:

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

答案 2 :(得分:24)

谢天谢地,我找到了这个。以下内容非常重要:

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

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

答案 3 :(得分:17)

关于64位Windows的说明似乎让几个人绊倒了。 如果您的应用程序在64位Windows下运行,则可能需要在[HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION]下设置DWORD。

答案 4 :(得分:16)

要完成......

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

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

******* ******* OR

对于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仿真),因为那不是DEFAULT值(如果安装了IE 11 - 或任何版本)。

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

答案 5 :(得分:14)

我知道这个帖子已经过时了,已经有了全面的答案。

万一你不知道:

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

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

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

答案 6 :(得分:6)

我完全同意所提供的解决方案,但我认为我认为可能有必要进行一些澄清。

对于每个进程(另请阅读:vshost.exe,yourWinformApplication.exe.svchost或application.exe的名称),需要添加一个带有提供值的DWORD,在我的情况下,我留下9000(十进制) )在应用程序名称和运行顺利和无错误的脚本。

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

答案 7 :(得分:3)

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

答案 8 :(得分:3)

我来到这个解决方案,它对我不起作用!因为我使用的是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]

答案 9 :(得分:1)

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

C# webbrowser Ajax call

答案 10 :(得分:1)

我遇到了同样的问题,这里的注册表答案没有用。

我的程序的新版本中有一个浏览器控件,在XP上工作正常,在Windows 7(64位)中失败。 旧版本适用于XP和Windows 7。

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

事实证明,该问题与Windows 7中的DEP保护有关。

旧版本的dotnet 2没有在exe中设置DEP required标志,但是从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)"

答案 11 :(得分:-3)

关于whitehawk接受的答案。 我只想尝试增加一点经验。只是想添加评论,但SO抱怨它太长了。

基本上,如果没有安装IE 9,注册表开关FEATURE_BROWSER_EMULATION将无法正常工作。

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

现在我认为这是bcos我的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&gt; 0 modo,两件事下工作:

  1. 转到MS网站&amp;在您的机器上下载并安装IE(X + N), 您需要在安装后重新启动。

  2. 应用whitehawk的答案。

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

    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