请问IE9 WebBrowser控件支持IE9的所有function,包括SVG吗?

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

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

我关心的是,我想在它上面渲染一些SVGgraphics。

WebBrowser控件的IE9“版本”,比如IE8版本,其实就是一个浏览器。 与IE8版本不同的是,通过更改文档types,您可以更好地控制页面内的呈现模式。 当然,要改变浏览器模式,你必须像早先的答案一样设置你的registry。 以下是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) –不pipe!DOCTYPE指令如何,都以IE8标准模式显示网页。
  • 8000(0x1F40) – 包含基于标准的!DOCTYPE指令的网页以IE8模式显示。
  • 7000(0x1B58) – 包含基于标准的网页!DOCTYPE指令以IE7标准模式显示。

完整的文档:

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

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

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

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

另一种方法是将registry项添加到:

HKLM> SOFTWARE> Microsoft> Internet Explorer> Main> FeatureControl> FEATURE_BROWSER_EMULATION

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

将registry项添加到HKCU中相同的path而不是HKLM也将起作用 – 这是很有用的,因为写入HKLM需要pipe理员权限,而HKCU则不需要。

谢天谢地我find了这个。 以下是非常重要的:

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

如果没有这个,我所产生的报告都不会在IE9安装后工作,尽pipe在IE8中工作得很好。 他们会在Web浏览器控件中正确显示,但是当我调用.Print()时,将会丢失字母,空白空间等。 它们只是基本的HTML,应该能够在Mosaic中渲染。 嘿不知道为什么IE7兼容性模式会失控。 值得注意的是,你可以。打印()相同的页面5次,并让它每次丢失不同的字母。 它甚至可以结转成PDF输出,所以它绝对是浏览器。

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

只是要完成…

您必须添加一个registry项到:

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

对于32位操作系统

*******要么*******

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

对于64位操作系统

并且此条目必须是一个DWORD,名称是可执行文件的名称,该文件托pipeWeb浏览器控件; 即:

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

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

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

我改为11001十进制或0x2AF9hex—(IE 11 EMULATION)

为什么这不是默认值(当你有IE 11安装 – 或任何版本),而不是IE 7或8,我永远不会知道…

我知道这个线程是旧的,已经有了全面的答案。

以防万一你不知道这一点:

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

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

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

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

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

最常见的错误是认为有必要添加“contoso.exe”,并认为这一切工作!

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

我来到这个解决scheme,它并没有为我工作! 因为我使用64位,我不得不更换registry:

 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] 

我喜欢下面的(C#)代码,它为您的应用程序设置registry设置。 不知道是否会在安装后削减它,虽然如果权限是必需的。 对我来说,它解决了WebSocket不能在WPF的WebBrowser控件中使用的问题。

C#webbrowser Ajax调用

我有同样的问题,registry答复在这里没有工作。

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

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

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

老版本的dotnet 2没有在exe中设置DEP所需的标志,但是从dotnet 2,SP 1开始(尽pipe如此,编译行为和exe的运行时行为根据你编译的机器而改变,很好。 ..)。

它logging在MSDN博客NXCOMPAT和C#编译器上 。 引用: 这无疑会让一些开发人员感到惊讶…下载一个框架服务包,重新编译,运行你的应用程序,现在你得到了IP_ON_HEAPexception。

将以下内容添加到Visual Studio中的后期构build中,将execlosuresDEP,并且所有事情都按预期工作:

 all "$(DevEnvDir)..\tools\vsvars32.bat" editbin.exe /NXCOMPAT:NO "$(TargetPath)" 
  • Editbin文档
  • Dumpbin /headers将在exe上显示DEP设置。

关于白鹰被接受的答案。 我只是想增加一点经验。 只是想添加一个评论,但是这个抱怨太长了。

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

例如,今天我自己的经验,我试图让IE浏览器的Web控制模式工作,因为我试图呈现的一个HTML将无法与VS2012下的.netControl,甚至没有工作时,我加载到IE8的HTML直接,还是CSS不会正确渲染(即使我说允许阻止的内容)。 但是我已经在朋友的win 8机器上testing了与IE10相同的html。 这就是为什么我试图将.net webControl设置为IE 10模式,但只是不断失败…

现在我想这是bcos我的胜利7机器只有IE8安装,所以无论哪个值我设置为FEATURE_BROWSER_EMULATION开关(价值IE9,IE10 IE11),它只是不会工作在所有!

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

另外,我注意到无论我设置了哪个值,甚至默认将其设置为0,webControl仍然使用IE 10模式,仍然适用于我。

所以总结一下,如果你已经安装了IE X,但是你希望你的.Net webControl在IE(X + N)N> 0 modo下工作,你需要做两件事情

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

  2. 应用白鹰的答案。

基本上:要通过使用registry来控制此function的值,请将您的可执行文件的名称添加到以下设置,并设置值以匹配所需的设置。

 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_EMULATIONfunction定义了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)无论使用!DOCTYPE指令,网页都以IE8标准模式显示。

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

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

充分参考这里