请问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下工作,你需要做两件事情 :
-
进入MS网站并下载并在您的机器上安装IE(X + N),安装后需要重新启动。
-
应用白鹰的答案。
基本上:要通过使用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控件的应用程序的默认值。
充分参考这里