Answers:
2015年10月更新
这个答案是几年前发布的,现在的问题确实应该是您X-UA-Compatible
是否应该考虑在网站上使用标记?微软对其浏览器所做的更改(更多有关以下内容)。
根据您支持的Microsoft浏览器,您可能不需要继续使用该X-UA-Compatible
标记。如果您需要支持IE9或IE8,那么我建议您使用标记。如果您仅支持最新的浏览器(IE11和/或Edge),那么我将考虑完全删除此标签。如果您使用Twitter Bootstrap并需要消除验证警告,则此标记必须以其指定顺序显示。以下附加信息:
该X-UA-Compatible
元标记允许网页制作者选择什么版本的Internet Explorer的页面是否应该呈现为。IE11对这些模式进行了更改;请参阅下面的IE11注释。替代IE11的浏览器Microsoft Edge仅X-UA-Compatible
在某些情况下使用meta标签。请参阅下面的Microsoft Edge注释。
根据Microsoft的说法,使用X-UA-Compatible
标记时,标记应在文档中尽可能高head
:
如果您使用的是X-UA兼容的META标签,则希望将其放置在尽可能靠近页面HEAD顶部的位置。Internet Explorer开始使用最新版本解释标记。当Internet Explorer遇到X-UA兼容的META标记时,它将使用指定版本的引擎重新开始。这是性能下降的原因,因为浏览器必须停止并重新开始分析内容。
这是您的选择:
为了尝试理解每种含义,这里是Microsoft提供的定义:
Internet Explorer支持许多文档兼容模式,这些模式可启用不同的功能并会影响内容的显示方式:
边缘模式告诉Internet Explorer以可用的最高模式显示内容。使用Internet Explorer 9,这等效于IE9模式。如果将来的Internet Explorer版本支持更高的兼容性模式,则设置为边缘模式的页面将以该版本支持的最高模式显示。当使用Internet Explorer 9查看时,这些页面仍将以IE9模式显示。InternetExplorer支持许多文档兼容模式,这些模式可启用不同的功能并可能影响内容的显示方式:
IE11模式为已建立和新兴的行业标准(包括HTML5,CSS3等)提供了最高的支持。
IE10模式为已建立和新兴的行业标准(包括HTML5,CSS3等)提供了最高的支持。
IE9模式为已建立的和新兴的行业标准提供了最高的支持,包括HTML5(工作草案),W3C级联样式表3级规范(工作草案),可缩放矢量图形(SVG)1.0规范等。[编者注:IE 9 不支持CSS3动画]。
IE8模式支持许多已建立的标准,包括W3C级联样式表2.1规范和W3C选择器API。它还为W3C级联样式表3级规范(工作草案)和其他新兴标准提供了有限的支持。
IE7模式呈现的内容就像Internet Explorer 7在标准模式下显示的一样,无论页面是否包含指令。
模拟IE9模式告诉Internet Explorer使用指令来确定如何呈现内容。标准模式指令以IE9模式显示,而怪癖模式指令以IE5模式显示。与IE9模式不同,仿真IE9模式遵循该指令。
仿真IE8模式告诉Internet Explorer使用指令来确定如何呈现内容。标准模式指令以IE8模式显示,而怪癖模式指令以IE5模式显示。与IE8模式不同,仿真IE8模式遵循该指令。
仿真IE7模式告诉Internet Explorer使用指令来确定如何呈现内容。标准模式指令以Internet Explorer 7标准模式显示,而怪癖模式指令以IE5模式显示。与IE7模式不同,仿真IE7模式遵循该指令。对于许多网站,这是首选的兼容模式。
IE5模式呈现的内容就像Internet Explorer 7以怪癖模式显示的内容一样,与Microsoft Internet Explorer 5中内容的显示方式非常相似。
IE10注:从IE10开始,怪异模式的行为与早期版本的浏览器不同。在IE9和更早版本中,怪癖模式将网页限制为IE5.5支持的功能。在IE10中,怪癖模式符合HTML5规范中指定的差异。
就个人而言,我总是选择http-equiv="X-UA-Compatible" content="IE=edge"
meta标记,因为较早的版本存在很多错误,并且我不希望IE决定进入“兼容模式”并将我的网站显示为IE7 vs IE8或9。我总是更喜欢最新版本的IE浏览器
IE11
来自微软:
从IE11开始,边缘模式是首选的文档模式。它代表了浏览器对现代标准的最高支持。
使用HTML5文档类型声明来启用边缘模式:
<!doctype html>
Edge模式是Internet Explorer 8中引入的,并且在每个后续版本中都可用。请注意,边缘模式支持的功能仅限于呈现内容的浏览器特定版本支持的功能。
从IE11开始,不建议使用文档模式,除非临时使用,否则不应再使用。确保更新依赖于旧功能和文档模式的网站以反映现代标准。
如果必须以一种特定的文档模式为目标,以便您的站点在进行改版以支持现代标准和功能时可以正常运行,请注意,您正在使用的是过渡功能,该功能可能在将来的版本中不可用。
如果当前使用兼容x-ua的标头将旧文档模式作为目标,则您的网站可能无法反映IE11的最佳使用体验。
Microsoft Edge(Windows 10随附的Internet Explorer替换)
X-UA-Compatible
IE的“ Edge”版本的元标记信息。来自微软:
引入“活着的”边缘文档模式
正如我们在2013年8月宣布的那样,我们将从IE11开始弃用文档模式。通过我们最新的平台更新,对旧文档模式的需求主要限于企业旧版Web应用程序。随着新的体系结构更改,这些旧文档模式将与“活动” Edge模式的更改隔离开来,这将有助于确保依赖那些模式的客户具有更高的兼容性,并帮助我们更快地改进Edge 。IE仍将支持由Intranet网站,“兼容性视图”列表上的网站以及仅与企业模式一起使用的网站提供的文档模式。
公共Internet网站将使用新的Edge模式平台呈现(忽略X-UA-Compatible)。我们的目标是,Edge从现在开始就是“活动”文档模式,以后将不再介绍其他文档模式。
大多数情况下,由于Microsoft Edge的更改不再支持文档模式,因此Microsoft提供了一种工具来扫描您的站点以检查其是否具有与Edge不兼容的代码。
Chrome = 1 IE的信息
还有chrome=1
,你可以使用或与像上述选项一起使用:<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
。chrome=1
适用于Google的Chrome框架,其定义为:
Google Chrome浏览器内嵌框架是一个开源浏览器插件。安装了该插件的用户在浏览器中打开页面时,可以访问Google Chrome的开放式网络技术和快速的JavaScript引擎。
Google Chrome浏览器内嵌框架无缝增强了您在Internet Explorer中的浏览体验。它使用Google Chrome的渲染技术显示启用了Google Chrome Frame的网站,使您可以访问最新的HTML5功能以及Google Chrome的性能和安全性功能,而不会以任何方式中断您正常的浏览器使用。
安装Google Chrome浏览器内嵌框架后,您无需考虑网络情况就会变得更好。
但是,要使该插件正常工作,您必须chrome=1
在X-UA-Compatible
meta标签中使用。
有关Chrome框架的更多信息,请参见此处。
注意: Google Chrome浏览器内嵌框架仅适用于IE6到IE9,并且已于2014年2月25日停用。有关更多信息,请点击此处。感谢@mck提供的链接。
验证:
HTML5:
仅当使用时,页面才会使用W3验证程序进行验证<meta http-equiv="X-UA-Compatible" content="IE=Edge">
。对于其他值,它将引发错误: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).
有关如何设置HTTP标头的更多详细信息,请参见olibre的答案或bitinn的答案。
XHTML
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
只要正确关闭标签(即/>
vs >
),使用时的验证就不会有问题。
Twitter的引导
这个标签已经被强烈地引导团队至少自2014推荐,并Bootlint的棉短绒撰写的团队继续扔了拼焊板警告省略标记时。短绒棉纸区分警告和错误,因此忽略此标签的严重性可能被认为是次要的。
有关更多信息,X-UA-Compatible
请参见Microsoft的网站定义文档兼容性。
有关IE支持的更多信息,请参见caniuse.com。
有关Twitter Bootstrap要求的更多信息,请参见bootlint项目Wiki页面。
使用content=
"IE=edge,chrome=1"
跳过其他X-UA-Compatible
模式
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
--------------------------
没有兼容性图标
IE9地址栏没有显示“ 兼容性视图”按钮
,并且页面上也没有显示混杂的菜单,图像和文本框。
功能需要
此元标记才能javascript::JSON.parse()
在IE8 上启用
(即使<!DOCTYPE html>
存在)
正确性
现代HTML / CSS / JavaScript的渲染/执行更为有效(更精细)。
性能
的三叉戟渲染引擎应该运行在它的速度更快边缘模式。
在您的HTML中
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
IE=edge
表示IE应该使用其渲染引擎的最新(边缘)版本chrome=1
表示IE应该使用Chrome渲染引擎(如果已安装)或更好地配置您的Web服务器:(
另请参见RiaD的答案)
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
</IfModule>
</IfModule>
<IfModule mod_headers.c>
Header append Vary User-Agent
</IfModule>
Steve Pause提出的 Nginx
server {
#...
add_header X-UA-Compatible "IE=Edge,chrome=1";
}
Lucas Riutzel提出的清漆代理
sub vcl_deliver {
if( resp.http.Content-Type ~ "text/html" ) {
set resp.http.X-UA-Compatible = "IE=edge,chrome=1";
}
}
IIS(从v7开始)
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-UA-Compatible" value="IE=edge,chrome=1" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
正如Lynda所注意到的(请参阅注释),IE11中的兼容性更改建议使用Edge模式:
从IE11开始,边缘模式是首选的文档模式。它代表了浏览器对现代标准的最高支持。
但是微软的立场尚不清楚。另一个MSDN页面不建议使用Edge模式:
由于边缘模式会强制以标准模式打开所有页面,而不管Internet Explorer的版本如何,您可能会想将其用于所有使用Internet Explorer查看的页面。不要这样做,因为
X-UA-Compatible
仅从Windows Internet Explorer 8开始才支持标头。
相反,Microsoft建议使用<!DOCTYPE html>
:
如果您希望所有受支持的Internet Explorer版本以标准模式打开页面,请使用HTML5文档类型声明[...]
正如Ricardo解释的那样(在下面的评论中),任何DOCTYPE(HTML4,XHTML1 ...)都可以用于触发标准模式,而不仅仅是HTML5的DOCTYPE。重要的是在页面中始终具有DOCTYPE。
Clara Onager甚至在旧版本的“ 指定遗留文档模式”中已经注意到:
边缘模式仅用于测试目的;不要在生产环境中使用它。
令人困惑的是,Usman Y认为Clara Onager在谈论:
该示例仅出于说明目的;不要在生产环境中使用它。
<meta http-equiv="X-UA-Compatible" content="IE=7,9,10" >
好吧...在此答案的其余部分中,我将给出更多解释,说明为什么使用content="IE=edge,chrome=1"
在生产中是一种好的做法。
多年来(2000年至2008年),IE市场份额超过80%。而IE V6被视为事实上的(在80%至97%的市场份额标准的2003,2004年,2005年和2006年的IE6只,所有IE版本更多的市场份额)。
由于IE6不遵守Web标准,因此开发人员必须使用IE6测试他们的网站。这种情况对Microsoft(MS)而言非常好,因为Web开发人员必须购买 MS产品(例如,如果不购买Windows,就无法使用IE),并且保持不遵从状态会带来更多的利润(即Microsoft希望成为除其他产品之外的标准)公司)。
因此,许多站点仅符合IE6,并且由于IE不符合Web标准,因此所有这些网站都无法在符合标准的浏览器上很好地呈现。更糟糕的是,许多站点仅需要IE。
但是,此时,Mozilla着眼于所有Web标准,开始了Firefox的开发(其他浏览器实现了IE6渲染页面的实现)。随着越来越多的Web开发人员希望使用新的Web标准功能,Firefox比IE支持的网站越来越多。
当IE市场份额下降时,MS意识到保持标准不兼容不是一个好主意。因此,MS开始按照越来越多的Web标准发布新的IE版本(IE8 / IE9 / IE10)。
但是问题是所有针对IE6设计的网站:Microsoft无法发布与这些旧的IE6设计的网站不兼容的新IE版本。MS并未推断出已经设计了IE版本的网站,而是要求开发人员X-UA-Compatible
在其页面中添加额外的数据()。
如今,仍在使用IE6 (2016年为0.7%)(2014年1月为4.5%),并且某些互联网网站仍兼容IE6。某些Intranet网站/应用程序已使用IE6进行了测试。某些Intranet网站仅在IE6上具有100%的功能。这些公司/部门倾向于推迟迁移成本:其他优先事项,没有人不再知道网站/应用程序的实施方式,旧版网站/应用程序的所有者破产了...
2013年,中国占IE6使用量的50%,但随着中国Linux发行量的广播,未来几年可能会有所变化。
如果您(尝试)遵守网络标准,则可以始终使用http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"
。为了保持与旧浏览器的兼容性,只需避免使用最新的Web功能:使用要支持的最旧浏览器支持的子集。或者,如果您想走得更远,则可以采用“ 优雅降级”,“ 渐进增强”和“ 不干扰JavaScript”的概念。(您也可能很高兴阅读Web开发人员应考虑的内容?。)
不要在意最好的IE版本渲染:这不是您的工作,因为浏览器必须符合Web标准。如果您的网站符合标准并使用适度的最新功能,则浏览器必须与您的网站兼容。
此外,由于有许多活动可以杀死 IE6(现在不再是IE6,MS活动),所以如今您可以避免浪费时间进行IE测试!
在2009年至2012年间,我曾在一家使用IE6(允许使用单一官方浏览器)的公司工作。我只需要为IE6实现一个Intranet网站。我决定尊重网络标准,但使用支持IE6的子集(HTML / CSS / JS)。
很难,但是当公司改用IE8时,网站仍然呈现良好,因为我使用Firefox和firebug来检查Web标准兼容性;)
Starting with IE11, edge mode is the preferred document mode; it represents the highest support for modern standards available to the browser.
不同之处在于,如果仅指定DOCTYPE
,则IE的“ 兼容性视图设置”优先。默认情况下,这些设置将强制所有Intranet网站进入“兼容性视图” DOCTYPE
。还有一个复选框可用于所有网站的兼容性视图,而不管DOCTYPE
。
X-UA-Compatible
会覆盖“兼容性视图设置”,因此无论浏览器设置如何,页面都将以标准模式呈现。这将强制执行以下标准模式:
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使用其最新引擎来渲染我们构建的页面,我已经为我的团队和我自己避免了数百个头痛。与您和Microsoft相反,我建议大家每次都使用上述meta标签。只要IE仍然存在,我们都会被“强制”使用此meta标签:p
<meta http-equiv="X-UA-Compatible" content="IE=10">
。然后,它将自己报告为Microsoft Internet Explorer。
我认为Microsoft的这张图说明了一切。为了告诉IE如何呈现内容,!DOCTYPE必须与X-UA-Compatible元标记一起使用。!DOCTYPE本身对更改IE文档模式没有影响。
http://ie.microsoft.com/testdrive/ieblog/2010/Mar/02_HowIE8DeterminesDocumentMode_3.png
仅出于完整性考虑,您实际上不必将其添加到HTML(HTML5中未知的http-equiv)
这样做,永远不要回头(第一个示例是apache,第二个示例是nginx)
Header set X-UA-Compatible "IE=Edge,chrome=1"
add_header X-UA-Compatible "IE=Edge,chrome=1";
只需说一句即可指示Internet Explorer使用其最新的呈现引擎
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
要使此行按预期工作,请确保:
<head>
<html>
否则,某些IE版本只会忽略它。
更新
简化了这两个规则,但它们很容易记住和验证。尽管MSDN文档指出您可以在此标签之前放置标题和其他元标签,但我不建议这样做。
关于元素在头部的顺序的有趣文章。(blogs.msdn.com,用于IE)
参考
从MSDN文档中:
的
X-UA-Compatible
[...]必须出现在标题以外的元件和其他元元素的所有其他元件之前的网页(HEAD部分)的报头。
如果您在与服务器相同的网络中使用网站,则尽管DOCTYPE,IE仍希望切换到兼容模式。
添加meta http-equiv="X-UA-Compatible" content="IE=Edge"
会禁用此不必要的行为。
这实际上是1个Google查询,但是这里是:
http://msdn.microsoft.com/zh-CN/library/jj676915(v=vs.85).aspx
了解旧文档模式
使用以下值从Internet Explorer 6到IE11以边缘模式显示网页,这是Internet Explorer支持的最高标准模式。
<meta http-equiv="x-ua-compatible" content="IE=edge"
请注意,这在功能上等同于使用HTML5文档类型。它将Internet Explorer置于受支持最高的文档模式。Edge最适合定期维护的网站,这些网站经过例行测试,可以在多个浏览器(包括Internet Explorer)之间进行互操作。
注意 从IE11开始,边缘模式被认为是首选的文档模式。(在早期版本中,它被认为是实验性的。)要了解更多信息,请参阅不建议使用文档模式。从Windows Internet Explorer 8开始,一些Web开发人员使用边缘模式元元素来隐藏地址栏上的“兼容性视图”按钮。从IE11开始,不再需要此按钮,因为该按钮已从地址栏中删除。因为它强制所有页面以标准模式打开,而不管Internet Explorer的版本如何,所以您可能会想对使用Internet Explorer查看的所有页面使用边缘模式。不要这样做,因为仅从Internet Explorer 8开始才支持X-UA-Compatible标头。
提示 如果希望所有受支持的Internet Explorer版本以标准模式打开页面,请使用HTML5文档类型声明,如前面的示例所示。
搜索结果中还有:
2.1.3.5 X-UA兼容性元标记和HTTP响应标头
在任何版本的Microsoft Edge中都不会实现此功能。
<meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE" />
参见https://msdn.microsoft.com/zh-cn/library/ff955275(v=vs.85).aspx
是的,我知道我参加晚会很晚,但是我遇到了一些问题和讨论,最后我的老板让我X-UA-Compatible
从正在处理的所有文档中删除了标签remove。
如果此信息已过期或不再相关,请纠正我。