如果一个网页以
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
如果页面以
<!DOCTYPE html>
<html>
<head>
<!-- without X-UA-Compatible meta -->
如果没有区别,我想我可以忽略 X-UA-Compatible
元标题,因为我只希望它在所有 IE 版本中以大多数标准模式呈现。
2021 年 11 月更新
由于这个答案现在已有 10 多年的历史,我的建议是完全不使用这个标签,除非您必须支持旧的旧版浏览器。
2015 年 10 月更新
这个答案是几年前发布的,现在的问题真的应该是您是否应该考虑在您的网站上使用 X-UA-Compatible
标记?以及 Microsoft 对其浏览器所做的更改(更多内容见下文) .
根据您支持的 Microsoft 浏览器,您可能不需要继续使用 X-UA-Compatible
标记。如果您需要支持 IE9 或 IE8,那么我建议使用标签。如果您只支持最新的浏览器(IE11 和/或 Edge),那么我会考虑完全删除这个标签。如果您使用 Twitter Bootstrap 并且需要消除验证警告,则此标签必须按其指定的顺序出现。以下附加信息:
X-UA-Compatible
元标记允许网络作者选择页面应呈现的 Internet Explorer 版本。 IE11 对这些模式进行了更改;请参阅下面的 IE11 注释。 Microsoft Edge 是替代 IE11 的浏览器,仅在某些情况下支持 X-UA-Compatible
元标记。请参阅下面的 Microsoft Edge 说明。
根据微软的说法,当使用 X-UA-Compatible
标记时,它应该在您的文档 head
中尽可能高:
如果您使用 X-UA-Compatible META 标签,您希望将其放置在尽可能靠近页面 HEAD 顶部的位置。 Internet Explorer 开始使用最新版本解释标记。当 Internet Explorer 遇到 X-UA-Compatible META 标签时,它会使用指定版本的引擎重新开始。这是一个性能损失,因为浏览器必须停止并重新开始分析内容。
以下是您的选择:
“IE=边缘”
“IE=11”
“IE=EmulateIE11”
“IE=10”
“IE=EmulateIE10”
“IE=9”
"IE=仿真IE9
“IE=8”
“IE=EmulateIE8”
“IE=7”
“IE=EmulateIE7”
“IE=5”
为了尝试理解每个含义,以下是 Microsoft 提供的定义:
Internet Explorer 支持多种文档兼容性模式,这些模式可启用不同的功能并影响内容的显示方式:
边缘模式告诉 Internet Explorer 以可用的最高模式显示内容。对于 Internet Explorer 9,这相当于 IE9 模式。如果 Internet Explorer 的未来版本支持更高的兼容性模式,则设置为边缘模式的页面将以该版本支持的最高模式显示。使用 Internet Explorer 9 查看时,这些相同的页面仍会以 IE9 模式显示。Internet Explorer 支持多种文档兼容性模式,这些模式可启用不同的功能并可能影响内容的显示方式:
IE11 模式为已建立和新兴的行业标准提供最高支持,包括 HTML5、CSS3 等。
IE10 模式为已建立和新兴的行业标准提供最高支持,包括 HTML5、CSS3 等。
IE9 模式为已建立和新兴的行业标准提供最高支持,包括 HTML5(工作草案)、W3C 级联样式表第 3 级规范(工作草案)、可缩放矢量图形 (SVG) 1.0 规范等。 [编者注:IE 9 不支持 CSS3 动画]。
IE8 模式支持许多已建立的标准,包括 W3C Cascading Style Sheets Level 2.1 Specification 和 W3C Selectors API;它还为 W3C 级联样式表第 3 级规范(工作草案)和其他新兴标准提供有限的支持。
无论页面是否包含 指令,IE7 模式都会将内容呈现为 Internet Explorer 7 以标准模式显示的内容。
模拟 IE9 模式告诉 Internet Explorer 使用 指令来确定如何呈现内容。标准模式指令以 IE9 模式显示,怪癖模式指令以 IE5 模式显示。与 IE9 模式不同,Emulate IE9 模式尊重 指令。
模拟 IE8 模式告诉 Internet Explorer 使用 指令来确定如何呈现内容。标准模式指令以 IE8 模式显示,怪癖模式指令以 IE5 模式显示。与 IE8 模式不同,Emulate IE8 模式尊重 指令。
模拟 IE7 模式告诉 Internet Explorer 使用 指令来确定如何呈现内容。标准模式指令以 Internet Explorer 7 标准模式显示,怪癖模式指令以 IE5 模式显示。与 IE7 模式不同,Emulate IE7 模式尊重 指令。对于许多网站来说,这是首选的兼容模式。
IE5 模式呈现内容,就好像它是由 Internet Explorer 7 以 quirks 模式显示的一样,这与 Microsoft Internet Explorer 5 中显示内容的方式非常相似。
IE10 注意:从 IE10 开始,怪癖模式的行为与早期版本的浏览器不同。在 IE9 及更早的版本中,quirks 模式将网页限制为 IE5.5 支持的功能。在 IE10 中,quirks 模式符合 HTML5 规范中规定的差异。
就个人而言,我总是选择 http-equiv="X-UA-Compatible" content="IE=edge"
元标记,因为旧版本有很多错误,我不希望 IE 决定进入“兼容模式”并将我的网站显示为 IE7 与 IE8 或 9。我总是更喜欢最新版本的 IE。
IE11
从 Microsoft:
从 IE11 开始,边缘模式是首选的文档模式;它代表了对浏览器可用的现代标准的最高支持。
使用 HTML5 文档类型声明来启用边缘模式:
Edge 模式是在 Internet Explorer 8 中引入的,并且在每个后续版本中都可用。请注意,边缘模式支持的功能仅限于渲染内容的特定版本的浏览器支持的功能。
从 IE11 开始,文档模式已被弃用,不应再使用,除非是临时使用。确保更新依赖旧功能和文档模式的站点以反映现代标准。
如果您必须以特定文档模式为目标,以便您的站点在您对其进行改造以支持现代标准和功能时正常运行,请注意您正在使用一种过渡功能,该功能可能在未来的版本中不可用。
如果您当前使用与 x-ua 兼容的标头来定位旧文档模式,则您的网站可能无法反映 IE11 提供的最佳体验。
Microsoft Edge(替代 Windows 10 附带的 Internet Explorer)
有关“Edge”版本 IE 的 X-UA-Compatible
元标记的信息。 From Microsoft:
引入“生活”边缘文档模式
正如我们在 2013 年 8 月宣布的那样,我们从 IE11 开始弃用文档模式。随着我们最新的平台更新,对旧文档模式的需求主要限于企业旧 Web 应用程序。随着新的架构更改,这些旧文档模式将与“实时”Edge 模式的更改隔离,这将有助于为依赖这些模式的客户保证更高级别的兼容性,并帮助我们更快地改进 Edge . IE 仍将支持 Intranet 站点、兼容性视图列表中的站点以及仅与企业模式一起使用时提供的文档模式。
公共 Internet 站点将使用新的 Edge 模式平台呈现(忽略 X-UA-Compatible)。我们的目标是让 Edge 成为从现在开始的“活”文档模式,并且不会再引入更多的文档模式。
随着 Microsoft Edge 的更改在大多数情况下不再支持文档模式,Microsoft 有一个 tool 来扫描您的站点以检查它是否包含与 Edge 不兼容的代码。
Chrome=1 IE 的信息
您还可以使用 chrome=1
或与上述选项之一一起使用,例如:<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
。 chrome=1
用于 Google 的 Chrome 框架,定义为:
Google Chrome Frame 是一个开源浏览器插件。安装了该插件的用户在浏览器中打开页面时可以访问 Google Chrome 的开放网络技术和快速的 JavaScript 引擎。
Google Chrome Frame 无缝增强了您在 Internet Explorer 中的浏览体验。它使用 Google Chrome 的渲染技术显示支持 Google Chrome 框架的网站,让您可以访问最新的 HTML5 功能以及 Google Chrome 的性能和安全功能,而不会以任何方式中断您通常的浏览器使用。
安装 Google Chrome Frame 后,网络会变得更好,而无需您考虑。
但要使该插件正常工作,您必须在 X-UA-Compatible
元标记中使用 chrome=1
。
有关 Chrome Frame 的更多信息,请参阅here。
注意:Google Chrome Frame 仅适用于 IE6 through IE9,并已于 2014 年 2 月 25 日停用。更多信息请参见here。感谢@mck 提供链接。
验证:
HTML5:
只有在使用 <meta http-equiv="X-UA-Compatible" content="IE=Edge">
时,页面才会使用 W3 Validator 进行验证。对于其他值,它将引发错误:A meta element with an http-equiv attribute whose value is X-UA-Compatible must have a content attribute with the value IE=edge.
换句话说,如果您有 IE=edge,chrome=1
,它将无法验证。我完全忽略了这个错误,因为现代浏览器只是忽略了这行代码。
如果您必须拥有完全有效的代码,请考虑通过设置 HTTP 标头在服务器级别执行此操作。作为注释,Microsoft 表示,If both of these instructions are sent (meta and HTTP), the developer's preference (meta element) takes precedence over the web server setting (HTTP header).
请参阅 olibre's answer 或 bitinn's answer,了解有关如何设置 HTTP 标头的更多详细信息。
XHTML
只要标签正确关闭(即 />
与 >
),使用 <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
就不会出现验证问题。
Twitter Bootstrap(V3 及以下)
至少从 2014 年开始,Bootstrap 团队就强烈建议使用此标签,并且当标签被省略时,twbs 团队编写的 linter 会继续抛出 warning。 linter 区分警告和错误,因此忽略此标记的严重性可能被认为是次要的。
有关 X-UA-Compatible
的详细信息,请参阅 Microsoft 的 Website Defining Document Compatibility。
有关 IE 支持的更多信息,请参阅caniuse.com。
有关 Twitter Bootstrap 要求的更多信息,请参阅 bootlint 项目 wiki page。
使用 content=
"IE=edge,chrome=1"
跳过其他 X-UA-Compatible
模式
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
--------------------------
没有兼容性图标 IE9 地址栏没有显示“兼容性视图”按钮,页面也没有显示杂乱无章的菜单、图像和文本框。
特性 在 IE8 上启用 javascript::JSON.parse() 需要此元标记(即使存在 也是如此)
现代 HTML/CSS/JavaScript 的正确性渲染/执行更有效(更好)。
性能 Trident 渲染引擎在其边缘模式下应该运行得更快。
用法
在您的 HTML 中
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
IE=edge 表示 IE 应该使用其渲染引擎的最新(边缘)版本
chrome=1 表示如果安装了 IE 应该使用 Chrome 渲染引擎
或更好地配置您的网络服务器:
(另请参阅 RiaD's answer)
Apache 由 pixeline
Stef Pause server { #... add_header X-UA-Compatible "IE=Edge,chrome=1"; 提出的 Nginx }
Lucas Riutzel 提出的清漆代理 sub vcl_deliver { if( resp.http.Content-Type ~ "text/html" ) { set resp.http.X-UA-Compatible = "IE=edge,chrome=1"; } }
IIS(从 v7 开始)
微软自 IE11 起推荐 Edge 模式
正如 Lynda 所注意到的(见评论),Compatibility changes in IE11 推荐 Edge 模式:
从 IE11 开始,边缘模式是首选的文档模式;它代表了对浏览器可用的现代标准的最高支持。
但微软的立场并不清楚。另一个MSDN page did not recommend Edge mode:
因为边缘模式强制所有页面都以标准模式打开,无论 Internet Explorer 的版本如何,您可能很想将其用于使用 Internet Explorer 查看的所有页面。不要这样做,因为仅从 Windows Internet Explorer 8 开始支持 X-UA-Compatible 标头。
相反,Microsoft 建议使用 <!DOCTYPE html>
:
如果您希望所有受支持的 Internet Explorer 版本都以标准模式打开您的页面,请使用 HTML5 文档类型声明 [...]
正如 Ricardo 所解释的(在下面的评论中),任何 DOCTYPE(HTML4、XHTML1...)都可用于触发标准模式,而不仅仅是 HTML5 的 DOCTYPE。重要的是在页面中始终有一个 DOCTYPE。
Clara Onager 甚至在旧版本的 Specifying legacy document modes 中注意到:
边缘模式仅用于测试目的;不要在生产环境中使用它。
令人困惑的是,Usman Y 认为 Clara Onager 在谈论:
[...] 示例仅用于说明目的;不要在生产环境中使用它。
嗯...在这个答案的其余部分,我会给出更多解释为什么使用 content="IE=edge,chrome=1"
是生产中的良好做法。
历史
多年来(2000 年至 2008 年),IE market share was more than 80%。并且 IE v6 被视为 事实上的 标准(2003 中 80% 到 97% 的市场份额,2004, 2005 and 2006 仅适用于 IE6,所有 IE 的市场份额更高版本)。
由于 IE6 不尊重 Web standards,开发人员不得不使用 IE6 测试他们的网站。这种情况对 Microsoft (MS) 来说非常好,因为 Web 开发人员必须购买 MS 产品(例如,IE 不能在不购买 Windows 的情况下使用),并且保持不合规更有利可图(即 Microsoft希望成为排除其他公司的标准)。
因此,许多网站仅符合 IE6,并且由于 IE 不符合 Web 标准,所有这些网站都不能在符合标准的浏览器上很好地呈现。更糟糕的是,many sites required only IE。
然而,在这个时候,Mozilla 开始尽可能尊重所有 Web 标准的 Firefox 开发(其他浏览器被实现为像 IE6 那样呈现页面)。随着越来越多的 Web 开发人员希望使用新的 Web 标准功能,越来越多的网站受到 Firefox 的支持而不是 IE。
当 IE 市场份额下降时,MS 意识到保持标准不兼容并不是一个好主意。因此,MS 开始发布新的 IE 版本(IE8/IE9/IE10),越来越尊重 web 标准。
网络不兼容问题
但问题在于所有为 IE6 设计的网站:微软无法发布与这些旧 IE6 设计的网站不兼容的新 IE 版本。 MS 要求开发人员在他们的页面中添加额外的数据 (X-UA-Compatible
),而不是推断网站设计的 IE 版本。
2016年还在用IE6
如今,IE6 仍在使用(0.7% in 2016)(2014 年 1 月为 4.5%),一些互联网网站仍然只兼容 IE6。一些 Intranet 网站/应用程序使用 IE6 进行测试。一些 Intranet 网站只能在 IE6 上 100% 运行。这些公司/部门更愿意推迟迁移成本:其他优先事项,没有人知道网站/应用程序是如何实施的,旧网站/应用程序的所有者破产了……
2013 年中国占 IE6 使用量的 50%,但它可能会在未来几年发生变化,如 Chinese Linux distribution is being broadcast。
对您的网络技能充满信心
如果您(尝试)尊重网络标准,您可以简单地始终使用 http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"
。为了保持与旧浏览器的兼容性,只需避免使用最新的 Web 功能:使用您想要支持的最旧浏览器支持的子集。或者,如果您想更进一步,您可以采用 Graceful degradation、Progressive enhancement 和 Unobtrusive JavaScript 等概念。 (您可能也会很高兴阅读 What should a web developer consider?。)
不要关心最好的 IE 版本渲染:这不是你的工作,因为浏览器必须符合 Web 标准。如果您的网站符合标准并使用最新的功能,则浏览器必须与您的网站兼容。
此外,由于有许多活动可以杀死 IE6(IE6 no more、MS campaign),现在您可以避免浪费时间进行 IE 测试!
个人IE6体验
在 2009-2012 年,我在一家使用 IE6 作为官方允许的单一浏览器的公司工作。我只需要为 IE6 实现一个 Intranet 网站。我决定尊重网络标准,但使用支持 IE6 的子集(HTML/CSS/JS)。
这很困难,但是当公司切换到 IE8 时,网站仍然呈现良好,因为我使用了 Firefox 和 firebug 来检查网络标准的兼容性;)
Starting with IE11, edge mode is the preferred document mode; it represents the highest support for modern standards available to the browser.
不同之处在于,如果您只指定 DOCTYPE
,则 IE 的 Compatibility View Settings 优先。默认情况下,这些设置强制所有 Intranet 站点进入兼容性视图,而不管 DOCTYPE
。还有一个复选框,用于对所有网站使用兼容性视图,无论 DOCTYPE
是什么。
https://i.stack.imgur.com/0rfvD.png
X-UA-Compatible
会覆盖兼容性视图设置,因此无论浏览器设置如何,页面都将以标准模式呈现。这强制标准模式用于:
内联网页面
当计算机管理员选择“在兼容性视图中显示所有网站”作为默认设置时的外部网页——想想大公司、政府、大学
当您无意中出现在 Microsoft 兼容性视图列表中时
用户手动将您的网站添加到兼容性视图设置中的列表的情况
DOCTYPE
单独无法做到这一点;在这些情况下,您最终会进入其中一种兼容性视图模式,而不管 DOCTYPE
。
如果同时指定了 meta
标记和 HTTP 标头,则 meta
标记优先。
此答案基于检查 IE8、IE9 和 IE10 中决定文档模式的完整规则。请注意,查看 DOCTYPE
是决定文档模式的最后一个后备选项。
使用它来强制 IE 隐藏地址栏中那个烦人的浏览器兼容性按钮:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
与 chrome=1
指令一起使用,因此它会提示 IE6、7、8 用户安装/使用 Chrome Frame。甚至 HTML5 Boilerplate 也使用它。
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
出现以来,我就一直使用它,完全没有问题。实际上,通过让用户的 IE 使用其最新引擎来呈现我们构建的页面,我已经为我的团队和我自己节省了数百个麻烦。与你和微软相反,我建议大家每次都使用上述元标记。只要 IE 还在,我们就会“被迫”使用这个元标记:p
<meta http-equiv="X-UA-Compatible" content="IE=10">
将其强制进入 IE10。然后它将自己报告为 Microsoft Internet Explorer。
由于我无法对标记的答案添加评论,因此我将在此处发布。
除了正确答案之外,您确实可以对此进行验证。由于此元标记仅针对 IE,您需要做的就是添加 IE 条件。
<!--[if IE]>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<![endif]-->
这样做就像添加任何其他 IE 条件语句一样,仅适用于 IE,不会影响其他浏览器。
我认为微软的这张图表解释了一切。为了告诉 IE 如何呈现内容,!DOCTYPE 必须使用 X-UA-Compatible 元标记。 !DOCTYPE 本身对更改 IE 文档模式没有影响。
https://i.stack.imgur.com/teQdv.png
http://ie.microsoft.com/testdrive/ieblog/2010/Mar/02_HowIE8DeterminesDocumentMode_3.png
一句话就说 指导 Internet Explorer 使用其最新的渲染引擎
<meta http-equiv="x-ua-compatible" content="ie=edge">
只是为了完整起见,您实际上不必将其添加到您的 HTML(在 HTML5 中是未知的 http-equiv)
这样做并且永不回头(第一个例子是 apache,第二个例子是 nginx)
Header set X-UA-Compatible "IE=Edge,chrome=1"
add_header X-UA-Compatible "IE=Edge,chrome=1";
Bad value X-UA-Compatible for attribute http-equiv on element meta.
- 这并不意味着它不起作用。它只是无效的代码。
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
要使这条线按预期工作,请确保:
它是
之后的第一个元素 在元标记之前没有使用条件注释,例如在 元素上否则一些 IE 版本会直接忽略它。
更新
这两条规则被简化了,但它们很容易记住和验证。尽管 MSDN 文档声明您可以将标题和其他元标记放在此之前,但我不建议这样做。
How make it work with conditional comments.
Interesting article about the order of elements in the head.(blogs.msdn.com,适用于 IE)
参考
X-UA-Compatible [...] 必须出现在网页的标题(HEAD 部分)中,位于除标题元素和其他元元素之外的所有其他元素之前。
如果您在与服务器相同的网络中使用您的网站 IE 喜欢切换到兼容模式,尽管 DOCTYPE。
添加meta http-equiv="X-UA-Compatible" content="IE=Edge"
禁用这种不需要的行为。
这是 LITERALLY 1 google query away,但这里是:
http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx
了解旧文档模式 使用以下值以边缘模式显示网页,这是 Internet Explorer 支持的最高标准模式,从 Internet Explorer 6 到 IE11。
搜索结果中还有:
有什么作用?
2.1.3.5 X-UA-Compatibility 元标记和 HTTP 响应头
此功能不会在任何版本的 Microsoft Edge 中实现。
<meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE" />
请参阅https://msdn.microsoft.com/en-us/library/ff955275(v=vs.85).aspx
是的,我知道我迟到了,但我只是遇到了一些问题和讨论,最后我的老板让我从我一直在处理的所有文档中删除 X-UA-Compatible
标记。
如果此信息已过时或不再相关,请更正我。