2011-01-06 99 views

回答

79

WebBrowser控件的IE9“版本”,如IE8版本,实际上是一个浏览器。与IE8版本不同,通过更改文档类型,您可以更好地控制页面内的呈现模式。当然,要改变浏览器模式,你必须像早先的答案那样设置你的注册表。下面是一个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) - 因特网浏览器9 网页显示在IE9 标准模式,而不管 !DOCTYPE指令。
  • 9000(0x2328) - Internet Explorer 9.包含基于标准的!DOCTYPE 指令的网页以IE9模式显示。
  • 8888(0x22B8) - 无论使用!DOCTYPE指令如何,在IE8标准模式下显示的网页为 , 。
  • 8000(0x1F40) - 包含基于标准的 的网页!DOCTYPE指令 以IE8模式显示。
  • 7000(0x1B58) - 包含基于标准的 的网页!DOCTYPE指令 以IE7标准模式显示。

完整的文档:

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

3

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

+2

再重新阅读我的答案。 downvote是不需要的。我说如果他试图使用IE9功能,然后部署到没有IE9的机器,那些功能将无法正常工作。您的向后兼容性注册表设置不会改变这一事实。 – Josh 2011-03-19 19:39:32

+16

你的第一句话显然是错误的。你的第二句话,至少是明显而懒惰的。顺便说一句,谢谢你的报复downvote。非常成熟。 – whitehawk 2011-04-08 21:09:13

+2

WebBrowser控件确实使用任何版本的IE安装;但是检测脚本可能没有意识到这一点。试试这个[site(http://www.whatismybrowser.com/)][1]。我知道其他网站给了我错误的信息,但本网站正确地将浏览器标识为我的机器上安装的IE版本。 [1]:http://www.whatismybrowser.com/ – cjbarth 2013-07-16 18:19:40

122

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

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

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

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

HKLM> SOFTWARE>微软> Internet Explorer中>首页> FeatureControl> FEATURE_BROWSER_EMULATION

,并在那里加入 'myApplicationName.exe' 与值'9000'强制WebBrowser控件在IE9模式下显示页面。尽管也有other values you can use too,但请注意,这些文档并不完全准确,因为无论您使用什么值,都无法在IE 8模式下呈现页面。

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

+7

元标记就像一个魅力。非常感谢! – viggity 2011-12-16 03:25:13

+2

可以在此处找到_content_部分的不同值:http://msdn.microsoft.com/en-us/library/ie/ms533876(v=vs.85).aspx – 2012-02-01 13:06:03

+0

如果此设置可以存储在CSS文件我会更快乐。现在我必须浏览许多文档,或者在Visual Studio中有多行搜索和替换功能? – 2012-02-02 15:23:15

22

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

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

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

6

我完全提供的解决方案达成一致,但我觉得有点澄清是非常重要的,我认为,可能是必要的。

对于每个进程(也请参阅:vshost.exe,yourWinformApplication.exe.svchost或application.exe的名称),需要使用提供的值添加DWORD,在我的情况下,我将9000(in十进制)在应用程序名称和运行平稳和无错脚本。

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

16

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

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] 
1

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

C# webbrowser Ajax call

15

只是要完成...

您必须添加注册表项以:

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION

对于32位操作系统

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

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微软\的Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION

对于64位操作系统

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

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

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

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

我改为11001十进制或十六进制0x2AF9 ---(IE 11仿真)

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

-3

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

基本上,如果没有安装IE 9,注册表开关FEATURE_BROWSER_EMULATION将无法在ALL上运行。

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

现在我想这是bcos我的赢机7只有IE8安装,开关(值为IE9,IE10 IE11),它不会在所有!

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

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

所以总结一下, 如果你安装了IE X,但你想你的.NET Web控件到IE(X + N)N> 0 MODO下工作,两件事你需要做的:

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

  2. apply whitehawk's answer。

基本上是: 要通过使用注册表来控制该功能的价值,增加您的可执行文件的名称下面的设置和设置的值以符合所需的设置。

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。网页在IE11边缘模式下显示DOCTYPE 指令IE11的默认值

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

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

    9999(0x270F)Windows Internet Explorer 9.不管!DOCTYPE指令如何,网页显示在 IE9标准模式下。

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

    重要在Internet Explorer 10,被显示在IE10标准 模式含有 基于标准!​​DOCTYPE指令网页 默认值。

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

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

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

全部裁判here

1

我有同样的问题,而注册表的答案在这里没有工作。

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

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

原来,问题是在Windows与DEP保护7.

旧版本的dotnet 2没有设置在exe文件所需的标志DEP的,但是从DOTNET 2,SP 1日起是这样的(是的,exe的编译行为和运行时行为根据你编译的机器而改变,很好......)。

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

添加以下内容后生成在Visual Studio中,打开DEP关闭的exe,一切按预期工作:

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

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

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

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

你不必硬编码IE版本号为

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