如何在 IE 中禁用兼容性视图

Posted

技术标签:

【中文标题】如何在 IE 中禁用兼容性视图【英文标题】:How to disable Compatibility View in IE 【发布时间】:2011-09-14 23:48:19 【问题描述】:

我想知道如何阻止使用 IE 8 的人进入兼容模式?

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

我找到了这个标签,我认为这会迫使人们保持 IE-8 模式,但我不太确定,也无法检查,因为我有 IE 9。

如果人们处于 IE 9 模式,我会强制他们不要进入 IE 8 或 IE 7 兼容模式?

我尝试将上面的行放在我的代码中,然后转到 IE 9 -> 工具 -> 兼容性视图(灰色)

但“兼容性视图设置”并未灰显,您似乎可以通过那里添加网站。

那不应该禁用吗?

【问题讨论】:

@Sparky672 - 是的,我愿意。我不支持 IE 7 并显示浏览器已过期警告。我通过可用性研究发现,大多数人并没有发布他们可能处于兼容模式(并且实际上不知道他们设置了它),当你告诉他们他们的浏览器已经过时并且他们认为他们正在使用 IE 8(研究时的最新浏览器)他们很快就会感到困惑。最好的解决方案是强制他们回到 IE 8/9(他们可能认为他们正在运行的东西) 【参考方案1】:

您只需要强制禁用 C.M.在 IE 中 - 只需粘贴此代码(在 IE9 和 c.m. 下将被禁用):

<meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE" />

来源:http://twigstechtips.blogspot.com/2010/03/css-ie8-meta-tag-to-disable.html

【讨论】:

这为我节省了 Twitter Bootstrap 和 IE 兼容性。仅供参考 - 这需要是第一个元标记。 这不是和 一样吗? 注意不要在这个标签之前使用任何条件 cmets。否则它不起作用!在那里找到了提示:***.com/questions/3449286/…【参考方案2】:

这应该足以强制IE 用户在任何IE 版本中放弃兼容模式:

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

但是,有几点需要注意:

上面的元标记应该作为&lt;head&gt;下的第一个标记。只有&lt;title&gt; 标签可以放在它上面。

如果您不这样做,您将在IE9 Dev Tools: X-UA-Compatible META tag ignored because document mode is already finalized. 上收到错误消息

如果您想要验证此标记,请确保您记得使用 /&gt; 而不仅仅是 &gt; 关闭 meta 标记。

IE11 开始,边缘模式是首选文档模式。要支持/启用它,请使用 HTML5 文档类型声明 &lt;!doctype html&gt;

如果您需要在IE7 上支持网络字体,请确保使用&lt;!DOCTYPE html&gt;。我已经对其进行了测试,发现在使用&lt;!doctype html&gt; 时,在IE7 上渲染网络字体变得非常不可靠。

Google Chrome Frame 的使用很流行,但不幸的是,它将在本月的某个时候(2014 年 1 月)停止使用。

<meta http-equiv="X-UA-Compatible" content="IE=EDGE,chrome=1">

广泛的相关信息here。使用它作为第一个元标记的提示在前面提到的源 here 上,该源已更新。

【讨论】:

我没有看到“X-UA-Compatible META 标签被忽略”的消息,但它使用的是 IE7 模式。当我把这个标签上移时——大部分时间它使用 IE11,但有时仍然使用 IE7。【参考方案3】:
<meta http-equiv="X-UA-Compatible" content="IE=8" /> 

应该强制您的页面以 IE8 标准呈现。用户可以将站点添加到兼容性列表中,但此标记将优先。

一种快速的检查方法是加载页面并在地址栏输入以下内容:

javascript:alert(navigator.userAgent) 

如果您在字符串中看到 IE7,则它正在以兼容模式加载,否则不是。

【讨论】:

如果他们使用 IE 9 这会将他们设置为 IE 8 会发生什么? 如果用户在 IE9 中使用它,它将以 IE8 标准模式显示。也可以使用IE9中的F12开发者工具栏进行验证。 更好地使用 此外,如果该站点托管在 Microsoft 认为是“Intranet”的地方,那么您就是搞砸了,它仍然会显示在兼容性视图中。覆盖它的唯一方法是取消选中“工具 - 兼容性视图”设置中的“在兼容性视图中显示 Intranet 站点”复选框。 IE8+ 中的默认设置真的很糟糕。 我同意这一点。刚刚被“在兼容性视图中显示 Intranet 站点”默认设置(在我的情况下为 IE9)所吸引。 我选中了“在兼容性视图中显示 Intranet 站点”,但 X-UA-Compatible 元标记似乎覆盖了它。【参考方案4】:

如果您使用的是 ASP.NET MVC,我在 _Layout 的代码块中发现 Response.AddHeader("X-UA-Compatible", "IE=edge,chrome=1") 可以很好地工作:

@Code
    Response.AddHeader("X-UA-Compatible", "IE=edge,chrome=1")
End Code
<!DOCTYPE html>
everything else

【讨论】:

【参考方案5】:

FelixFett 给出的答案对我有用。重申:

<meta http-equiv="X-UA-Compatible" content="IE=11; IE=10; IE=9; IE=8; IE=7; IE=EDGE" />

我将它作为我代码中的第一个“元”标签。我添加了 10 和 11,因为它们是现在为 Internet Explorer 发布的版本。

我本来只想评论他的回答,但我没有足够高的声誉......

【讨论】:

【参考方案6】:

在 Apache 中实现此目的的另一种方法是将以下几行放入您网站根文件夹(或 Apache 的配置文件)中的 .htaccess 中。

BrowserMatch "MSIE" isIE
BrowserMatch "Trident" isIE
Header set X-UA-Compatible "IE=edge" env=isIE

这要求您启用 mod_headersmod_setenvif 模块。

额外的 HTTP 标头仅发送到 IE 浏览器,其他浏览器均不发送。

【讨论】:

【参考方案7】:

在 JSF 中我使用过:

<h:head>
    <f:facet name="first">
        <meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
    </f:facet>

    <!-- ... other meta tags ... -->

</h:head>

【讨论】:

【参考方案8】:

向您的页面添加标签不会控制 Internet 控制面板中的 UI(当您选择工具 -> 选项时出现的对话框)。如果您正在查看的主页可能是 google.com、msn.com、about:blank 或 example.com,则 Internet 控制面板无法知道您的页面内容可能是什么,并且不会下载它在后台。

查看this document on MSDN,其中讨论了兼容模式以及如何为您的网站关闭它。

【讨论】:

以上是关于如何在 IE 中禁用兼容性视图的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用兼容性视图设置?

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

js强制不使用“兼容性视图”

如何将IE浏览器设置为兼容模式

IE 11 浏览器兼容性视图设置

是否可以在 CSS 中定位 IE8 的兼容性视图?