如何在WinForms应用程序中closuresIE WebBrowserControl上的兼容性视图?

在我的WinForms应用程序中,如果我使用WebBrowser控件,它似乎被迫进入兼容模式。 我怎样才能禁用这一点,并使其行为与浏览相同的网站时,我的机器上的独立IE浏览器相同?

  • 我不想更改registry。 我希望一切都被包含在我的应用程序。
  • 我正在加载的网站不是我的,所以我没有能力对其进行更改(除非它们可以在我的应用程序中以编程方式完成)。

除configuration以下registry设置之外,没有办法执行此操作:

 HKLM \ Software \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION

或者如果它是64位Windows上的32位应用程序:

 HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION`

这些设置不在WebBrowser控件中显示。

欲了解更多信息,请参阅:

webbrowser控件使用什么IE兼容模式?

如果链接死亡:

创build一个与可执行文件名称匹配的DWORD值,并将此值设置为以下值之一:

7000:包含基于标准的<!DOCTYPE>指令的页面在IE7模式下显示。
8000:包含基于标准的<!DOCTYPE>指令的页面以IE8模式显示
8888:页面总是以IE8模式显示,不pipe<!DOCTYPE>指令如何。 (这绕过了前面列出的例外。)
9000:使用IE9设置!
9999:强制IE9

例如:

在这里输入图像描述

从我自己的IE9实验:

  • 9000 – inheritanceIE9全局兼容模式设置中设置的兼容模式。 即: 在这里输入图像描述

  • 9999 – 不pipe全局configuration的兼容模式设置如何,强制主机应用程序中的IE9不能兼容模式

您的应用程序可能需要检测哪个底层的IE版本可用来确定使用哪个值:

 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ Version

或者如果它是64位Windows上的32位应用程序:

 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Version

IE8出来的时候还有一篇比较老的文章值得一看:

更多的IE8扩展性改进

您也可以在每个用户的基础上configuration这些设置:

 HKCU \ Software \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION

虽然这不是你问的问题,但如果你拥有这个网站,你可以把下面的内容添加到html的head部分:

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

请参阅: http : //msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx

这里是问题的细节:如果用户在IE8中启用兼容性视图,那么它将覆盖所有的页面指令。 因此,如果用户在IE中启用了该function,那么您尝试使用的任何页面或服务器variables都将无法阻止IE切换到兼容性视图。 大多数人认为页面指令或某种秘密头文件服务器variables将修复该网站。 不。 如果设置已被手动覆盖,这些解决scheme都不会起作用。 我知道,这不是很酷。 因此,只有当用户没有启用兼容性视图function时,以下方法才有效。

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

要阐明在registry中更改此步骤的步骤,请编辑密钥:

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

然后添加一个名为iexplore.exe的新DWORD。 为此,请右键单击该键,然后select“新build”>“DWORD”。 给那个DWORD 9999的十进制值。 这将使所有站点呈现没有兼容性视图。 要启用兼容性视图再次删除此DWORD。 另外如果你希望自动化这个改变并在你的系统上运行批处理脚本,请查看Michal M的脚本。

https://gist.github.com/michal-m/1853315

我知道这是一个老问题,但有一种方法可以在Visual Basic 2010和更高版本的webbrowser控件中插入一个头文件,以禁用兼容性视图:

你需要做的第一件事是抓住当前的网页,然后replace头标签,如下所示:

 Sub compatible() ' --- simple routine to disable compatible view. Dim the_url As String Dim message As String Dim theReplacement As String Dim oldMessage As String the_url = WebBrowser1.Url.OriginalString WebBrowser1.Navigate(the_url) message = "<head>" + Chr(13) + Chr(10) + "<meta http-equiv=" + Chr(34) + "X-UA-Compatible" + Chr(34) + "content=" + Chr(34) + "IE=edge" + Chr(34) + " />" + Chr(13) + Chr(10) + "<base href=" + Chr(34) + the_url + Chr(34) + ">" oldMessage = WebBrowser1.DocumentText.ToString() theReplacement = Replace(oldMessage, "<head>", message) WebBrowser1.DocumentText = theReplacement End Sub 

该代码在web浏览器控件中添加以下两行:

 <meta http-equiv="X-UA-Compatible"content="IE=edge" /> <base href="(url of the web page)">