如果一个网页以
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
如果页面以开头
<!DOCTYPE html>
<html>
<head>
<!-- without X-UA-Compatible meta -->
如果没有区别,我想我可以忽略X-UA-兼容的元头,因为我只希望它在所有IE版本中以最标准的模式呈现。
如果一个网页以
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
如果页面以开头
<!DOCTYPE html>
<html>
<head>
<!-- without X-UA-Compatible meta -->
如果没有区别,我想我可以忽略X-UA-兼容的元头,因为我只希望它在所有IE版本中以最标准的模式呈现。
当前回答
使用此选项可强制IE在地址栏中隐藏烦人的浏览器兼容性按钮:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
其他回答
2021 11月更新
因为这个答案已经有10多年的历史了,所以我的建议是完全不使用这个标签,除非您必须支持旧的旧浏览器。
2015年10月更新
这个答案是几年前发布的,现在的问题真的应该是,你是否应该考虑在你的网站上使用X-UA-兼容标签?随着微软对其浏览器所做的改变(下面将详细介绍)。
根据您支持的Microsoft浏览器,您可能不需要继续使用X-UA-Compatible标签。如果您需要支持IE9或IE8,那么我建议您使用该标签。如果你只支持最新的浏览器(IE11和/或Edge),那么我会考虑完全删除这个标签。如果您使用Twitter Bootstrap并需要消除验证警告,则此标记必须按指定的顺序出现。以下附加信息:
X-UA-Compatible元标记允许web作者选择页面应呈现为哪个版本的Internet Explorer。IE11对这些模式进行了更改;参见下面的IE11注释。取代IE11的浏览器Microsoft Edge仅在某些情况下支持X-UA-兼容的元标签。请参阅下面的Microsoft Edge说明。
根据微软的说法,当使用X-UA-Compatible标签时,它应该尽可能高地放在文档头上:
如果您使用的是X-UA-Compatible META标记,则希望将其尽可能靠近页面HEAD的顶部。Internet Explorer开始使用最新版本解释标记。当Internet Explorer遇到X-UA-Compatible META标记时,它会使用指定版本的引擎重新启动。这会影响性能,因为浏览器必须停止并重新开始分析内容。
以下是您的选择:
“IE=边缘”“即=11”“IE=模拟IE11”“即=10”“IE=模拟IE10”“即=9”“IE=模拟IE9“即=8”“IE=模拟IE8”“即=7”“IE=模拟IE7”“即=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级联样式表2.1级规范和W3C选择器API;它还为W3C级联样式表第3级规范(工作草案)和其他新兴标准提供了有限的支持。
IE7模式将内容呈现为Internet Explorer 7以标准模式显示的内容,无论页面是否包含<!DOCTYPE>指令。
仿真IE9模式告诉Internet Explorer使用<!DOCTYPE>指令,用于确定如何呈现内容。标准模式指令以IE9模式显示,怪癖模式指令以IE 5模式显示。与IE9模式不同,Emulate IE9模式尊重<!DOCTYPE>指令。
仿真IE8模式告诉Internet Explorer使用<!DOCTYPE>指令,用于确定如何呈现内容。标准模式指令以IE8模式显示,怪癖模式指令以IE 5模式显示。与IE8模式不同,Emulate IE8模式尊重<!DOCTYPE>指令。
仿真IE7模式告诉Internet Explorer使用<!DOCTYPE>指令,用于确定如何呈现内容。标准模式指令以Internet Explorer 7标准模式显示,怪癖模式指令以IE5模式显示。与IE7模式不同,Emulate IE7模式尊重<!DOCTYPE>指令。对于许多网站,这是首选的兼容性模式。
IE5模式将内容呈现为Internet Explorer 7以怪癖模式显示的内容,这与Microsoft Internet Explorer 5中显示内容的方式非常相似。
IE10注意:从IE10开始,怪癖模式的行为与早期版本的浏览器不同。在IE9和早期版本中,怪癖模式将网页限制为IE5.5支持的功能。在IE10中,怪癖模式符合HTML5规范中规定的差异。
就我个人而言,我总是选择http equiv=“X-UA-Compatible”content=“IE=edge”元标签,因为旧版本有很多bug,我不希望IE决定进入“兼容性模式”,并将我的网站显示为IE7与IE8或9。我总是喜欢IE的最新版本。
IE11
来自Microsoft:
从IE11开始,边缘模式是首选的文档模式;它代表了对浏览器可用的现代标准的最高支持。
使用HTML5文档类型声明启用边缘模式:
<!doctype html>
边缘模式是在Internet Explorer 8中引入的,并在随后的每个版本中都提供。请注意,边缘模式支持的功能仅限于呈现内容的浏览器的特定版本所支持的功能。
从IE11开始,文档模式已被弃用,不应再使用,除非是临时使用。确保更新依赖传统功能和文档模式的网站,以反映现代标准。
如果您必须以特定的文档模式为目标,以便在修改网站以支持现代标准和功能的同时使其正常工作,请注意您使用的是过渡功能,该功能可能在未来版本中不可用。
如果您当前使用与x-ua兼容的标头来针对传统文档模式,则您的网站可能无法反映IE11提供的最佳体验。
Microsoft Edge(Windows 10附带的Internet Explorer的替代品)
有关IE“Edge”版本X-UA-兼容元标签的信息。来自Microsoft:
引入“实时”Edge文档模式
正如我们在2013年8月宣布的那样,我们正在弃用IE11的文档模式。随着我们最新的平台更新,对传统文档模式的需求主要限于企业传统web应用程序。随着新的体系结构更改,这些传统文档模式将与“实时”Edge模式的更改隔离开来,这将有助于确保依赖这些模式的客户获得更高级别的兼容性,并帮助我们更快地改进Edge。IE仍然支持intranet站点、兼容性视图列表中的站点以及仅与企业模式一起使用时提供的文档模式。
公共互联网站点将使用新的Edge模式平台呈现(忽略X-UA-兼容)。我们的目标是Edge从现在起就是“活的”文档模式,今后将不再引入其他文档模式。
随着Microsoft Edge的更改,在大多数情况下不再支持文档模式,Microsoft有一个工具可以扫描您的网站,以检查它是否包含与Edge不兼容的代码。
Chrome=1 IE信息
还有chrome=1,您可以与上述选项之一一起使用,例如:<meta-http-equiv=“X-UA-Compatible”content=“IE=Edge,chrome=1”>。chrome=1表示谷歌的chrome框架,其定义如下:
谷歌Chrome框架是一个开源浏览器插件。安装了该插件的用户在浏览器中打开页面时,可以使用Google Chrome的开放web技术和快速的JavaScript引擎。
Google Chrome Frame无缝增强您在Internet Explorer中的浏览体验。它使用Google Chrome的渲染技术显示支持Google Chrome框架的网站,让您可以访问最新的HTML5功能以及Google Chrome的性能和安全功能,而不会以任何方式中断您的正常浏览器使用。
当安装了谷歌Chrome框架后,网络就变得更好了,而你不必考虑它。
但要使该插件工作,必须在X-UA-Compatible元标记中使用chrome=1。
有关Chrome框架的更多信息,请点击此处。
注意:谷歌Chrome框架仅适用于IE6至IE9,于2014年2月25日退役。更多信息可在此处找到。感谢@mck的链接。
验证:
HTML5:
仅当使用<meta-http equiv=“X-UA-Compatible”content=“IE=Edge”>时,页面才会使用W3验证器进行验证。对于其他值,它将抛出错误:具有http-equiv属性且值为X-UA-Compatible的元元素必须具有值为IE=edge的内容属性。换句话说,如果IE=edge,chrome=1,它将不会生效。我完全忽略了这个错误,因为现代浏览器只是忽略了这行代码。
如果您必须拥有完全有效的代码,那么可以考虑在服务器级别通过设置HTTP头来执行此操作。微软表示,需要注意的是,如果这两个指令都被发送(元和HTTP),那么开发者的偏好(元元素)优先于web服务器设置(HTTP头)。有关如何设置HTTP头的详细信息,请参阅olibre的答案或bitinn的答案。
XHTML语言
使用<meta-http-equiv=“X-UA-Compatible”content=“IE=Edge”/>时,只要标记正确关闭(即/>vs>),验证就没有问题。
Twitter引导(V3及以下版本)
至少从2014年起,Bootstrap团队就强烈建议使用该标签,而twbs团队撰写的linter Bootlint继续在忽略该标签时发出警告。linter区分警告和错误,因此省略此标记的严重性可能被认为是次要的。
有关X-UA-Compatible的更多信息,请参阅Microsoft网站定义文档兼容性。
有关IE支持的更多信息,请访问caniuse.com。
有关Twitter Bootstrap要求的更多信息,请参阅bootlint项目wiki页面。
使用content=“IE=边缘,铬=1” 跳过其他X-UA-兼容模式
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
--------------------------
无兼容性图标IE9地址栏不会显示“兼容性视图”按钮,页面也不会显示杂乱的菜单、图像和文本框。功能需要此元标记才能在IE8上启用javascript::JSON.parse()(即使存在<!DOCTYPE html>)现代HTML/CSS/JavaScript的正确呈现/执行更有效(更好)。性能Trident渲染引擎在其边缘模式下应该运行得更快。
用法
在HTML中
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
IE=边缘表示IE应使用其渲染引擎的最新(边缘)版本chrome=1表示IE应使用chrome渲染引擎(如果已安装)
或者在web服务器的配置中更好:(另见RiaD的回答)
pixeline提出的Apache<IfModule mod_setenvif.c><IfModule mod_headers.c>浏览器匹配MSIE ie标题集X-UA-兼容“IE=边缘,铬=1”env=IE</IfModule></IfModule><IfModule mod_headers.c>标头附加Vary用户代理</IfModule>Stef Pause提议的Nginx服务器{#...add_header X-UA-兼容“IE=边缘,铬=1”;}Lucas Riutzel提议的清漆代理子vcl交付{如果(resp.http.Content-Type~“text/html”){set resp.http.X-UA-Compatible=“IE=边缘,铬=1”;}}IIS(自v7起)<配置><system.webServer><http协议><customHeaders><add name=“X-UA-Compatible”value=“IE=边缘,铬=1”/></customHeaders></httpProtocol></system.webServer></配置>
自IE11以来,Microsoft建议使用边缘模式
Lynda注意到(见评论),IE11中的兼容性更改建议使用边缘模式:
从IE11开始,边缘模式是首选的文档模式;它代表了对浏览器可用的现代标准的最高支持。
但微软的立场并不明确。另一个MSDN页面不推荐边缘模式:
因为边缘模式强制所有页面以标准模式打开,无论Internet Explorer的版本如何,您可能会对使用Internet Explorer查看的所有页面使用此选项。不要这样做,因为X-UA-Compatible标头仅支持启动使用Windows Internet Explorer 8。
相反,Microsoft建议使用<!DOCTYPE html>:
如果要打开所有受支持的Internet Explorer版本您的页面处于标准模式,请使用HTML5文档类型声明〔…〕
正如里卡多(在下面的评论中)解释的那样,任何DOCTYPE(HTML4、XHTML1…)都可以用于触发标准模式,而不仅仅是HTML5的DOCTYPE。重要的是页面中始终有一个DOCTYPE。
Clara Onager甚至在旧版本的指定传统文档模式中注意到:
边缘模式仅用于测试目的;不要在生产环境中使用它。
令人困惑的是,乌斯曼·Y认为克拉拉·奥纳格尔所说的是:
[…]示例仅用于说明目的;不要在生产环境中使用它。<meta http equiv=“X-UA-Compatible”content=“IE=7,9,10”>
好在这个答案的其余部分,我给出了更多的解释,为什么使用content=“IE=edge,chrome=1”是一个很好的生产实践。
历史
多年来(2000年至2008年),IE市场份额超过80%。IE v6被视为事实上的标准(仅IE6在2003年、2004年、2005年和2006年的市场份额为80%至97%,所有IE版本的市场份额都更大)。
由于IE6不遵守Web标准,开发人员不得不使用IE6测试他们的网站。这种情况对微软(MS)来说很好,因为网络开发人员必须购买MS产品(例如,如果不购买Windows,就不能使用IE),而保持不合规则更有利可图(即,微软希望成为排除其他公司的标准)。
因此,许多网站仅符合IE6,并且由于IE不符合web标准,所有这些网站都没有在符合标准的浏览器上很好地呈现。更糟糕的是,许多网站只需要IE。
然而,在这个时候,Mozilla开始了Firefox开发,尽可能遵守所有的网络标准(其他浏览器被实现为呈现IE6所做的页面)。随着越来越多的web开发人员希望使用新的web标准功能,Firefox比IE更支持越来越多的网站。
当IE市场份额减少时,MS意识到保持标准不兼容不是一个好主意。因此,微软开始发布新的IE版本(IE8/IE9/IE10),并越来越多地遵守网络标准。
web不兼容问题
但问题是所有为IE6设计的网站:微软不能发布与这些旧的IE6设计网站不兼容的新IE版本。微软要求开发者在网页中添加额外的数据(X-UA-兼容),而不是推导网站设计的IE版本。
IE6仍在2016年使用
如今,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测试!
个人IE6经验
2009-2012年,我在一家使用IE6作为官方单一浏览器的公司工作。我只能为IE6实现一个内部网网站。我决定尊重web标准,但使用IE6功能子集(HTML/CSS/JS)。
这很难,但当公司改用IE8时,网站仍然呈现良好,因为我使用了Firefox和firebug来检查网络标准兼容性;)
我认为这张来自微软的图表解释了一切。为了告诉IE如何呈现内容!DOCTYPE必须与X-UA-兼容的元标记一起使用!DOCTYPE本身对更改IE文档模式没有影响。
http://ie.microsoft.com/testdrive/ieblog/2010/Mar/02_HowIE8DeterminesDocumentMode_3.png
使用此选项可强制IE在地址栏中隐藏烦人的浏览器兼容性按钮:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
如果你在与服务器相同的网络中使用你的网站,IE喜欢切换到兼容模式,尽管DOCTYPE。添加meta-http equiv=“X-UA-Compatible”content=“IE=Edge”将禁用此不需要的行为。