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

时间:2011-07-16 11:33:43

标签: winforms internet-explorer browser webbrowser-control cross-browser

在我的WinForms应用程序中,如果我使用WebBrowser控件,它似乎被强制进入兼容模式。如何禁用此功能,并使其在浏览同一站点时与我的计算机上的独立IE操作相同?

  • 我不想进行注册表更改。我希望所有内容都包含在我的应用程序中。
  • 我加载的网站不是我的,所以我无法对其进行更改(除非可以在我的应用程序中以编程方式完成)。

4 个答案:

答案 0 :(得分:55)

除配置以下注册表设置外,无法执行此操作:

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控件中。

有关详细信息,请参阅:

  

What IE compatibility mode does the webbrowser control use?

如果链接死亡:

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

  

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

例如:

enter image description here

从我自己的IE9实验:

  • 9000 - 继承IE9全局兼容模式设置中设置的兼容模式。即: enter image description here

  • 9999 - 强制IE9在主机应用程序中脱离兼容模式,无论全局配置的兼容模式设置如何

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Version

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

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

还有一篇来自IE8出版时的旧文章值得一看:

  

More IE8 Extensibility Improvements

您还可以在每个用户的基础上配置以下设置:

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

答案 1 :(得分:26)

虽然这不是你问的,如果你拥有该网站,你可以将以下内容添加到html的head部分。:

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

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

答案 2 :(得分:5)

以下是问题的一小部分:如果用户在IE8中启用兼容性视图,那么它将覆盖所有页面指令。因此,如果用户在IE中启用了此功能,则您尝试使用的任何页面或服务器变量都将无法阻止IE切换到兼容性视图。大多数人认为页面指令或某种秘密头服务器变量将修复该站点。不。如果已手动覆盖设置,则这些解决方案都不起作用。我知道,这并不酷。因此,仅当用户启用兼容性视图功能时,以下内容才有效。

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

要澄清在注册表中更改此项的步骤,请编辑密钥:

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

然后添加一个名为 iexplore.exe 的新DWORD。要执行此操作,请右键单击该键,然后选择新建&gt; DWORD。将该DWORD设置为 9999 的十进制值。这将使所有站点呈现而没有兼容性视图。要再次启用兼容性视图,请删除此DWORD。此外,如果您希望自动执行此更改并在系统上运行批处理脚本,请查看Michal M的脚本。

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

答案 3 :(得分:2)

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

您需要做的第一件事就是抓住当前网页,然后按如下方式替换head标签:

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

此代码在webbrowser控件中添加以下两行:

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