<meta http-equiv ="X-UA-Compatible"content ="IE = edge">是做什么用的?

Mor*_*eng 1378 html browser internet-explorer x-ua-compatible

如果一个网页开头有什么区别

<!DOCTYPE html> 
<html> 
  <head> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
Run Code Online (Sandbox Code Playgroud)

如果页面以.开头

<!DOCTYPE html> 
<html> 
  <head> 
     <!-- without X-UA-Compatible meta -->
Run Code Online (Sandbox Code Playgroud)

如果没有区别,我想我可以忽略X-UA-Compatible元头,因为我只想在所有IE版本中以大多数标准模式呈现它.

L84*_*L84 1646

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在某些情况下使用元标记.请参阅下面的Microsoft Edge注释.

根据Microsoft的说法,在使用X-UA-Compatible标签时,它应该在您的文档中尽可能高head:

如果您使用的是X-UA兼容的META标签,您可以将其尽可能靠近页面顶部放置.Internet Explorer开始使用最新版本解释标记.当Internet Explorer遇到兼容X-UA的META标记时,它会使用指定版本的引擎重新启动.这是一个性能损失,因为浏览器必须停止并重新开始分析内容.

以下是您的选择:

  • "IE =边缘"
  • "IE = 11"
  • "IE = EmulateIE11"
  • "IE = 10"
  • "IE = EmulateIE10"
  • "IE = 9"
  • "IE = EmulateIE9
  • "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级联样式表2.1级规范和W3C选择器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标准模式显示,而quirks模式指令以IE5模式显示.与IE7模式不同,Emulate IE7模式遵循该指令.对于许多网站,这是首选的兼容模式.

  • IE5模式呈现内容,好像它是由Internet Explorer 7以怪异模式显示的,这与Microsoft Internet Explorer 5中显示内容的方式非常相似.

IE10注意:从IE10开始,怪癖模式的行为与早期版本的浏览器不同.在IE9及更早版本中,怪癖模式将网页限制为IE5.5支持的功能.在IE10中,quirks模式符合HTML5规范中指定的差异.

就个人而言,我总是选择http-equiv="X-UA-Compatible" content="IE=edge"元标记,因为旧版本有很多错误,我不希望IE决定进入"兼容模式"并将我的网站显示为IE7 vs IE8或9.我总是喜欢最新版本的IE浏览器.

IE11

来自微软:

从IE11开始,边缘模式是首选的文档模式; 它代表了对浏览器可用的现代标准的最高支持.

使用HTML5文档类型声明启用边缘模式:

<!doctype html>

边缘模式是在Internet Explorer 8中引入的,并且在随后的每个版本中都可用.请注意,边缘模式支持的功能仅限于呈现内容的特定浏览器版本支持的功能.

从IE11开始,不推荐使用文档模式,不应再使用它们,临时情况除外.确保更新依赖于旧版功能和文档模式的站点以反映现代标准.

如果您必须定位特定文档模式,以便在您重新设计网站时支持现代标准和功能,请注意您正在使用过渡功能,该功能可能在将来的版本中不可用.

如果您当前使用x-ua兼容标头来定位旧文档模式,则您的网站可能无法反映IE11的最佳体验.

Microsoft Edge(Windows 10附带的Internet Explorer替换)

关于X-UA-CompatibleIE的"Edge"版本的元标记的信息.来自微软:

介绍"生活"边缘文档模式

正如我们在2013年8月宣布的那样,我们正在弃用IE11中的文档模式.通过我们最新的平台更新,对遗​​留文档模式的需求主要限于企业遗留Web应用程序.随着新的体系结构更改,这些遗留文档模式将与"生活"边缘模式中的更改隔离开来,这将有助于为依赖这些模式的客户提供更高级别的兼容性,并帮助我们更快地在Edge中进行更改.IE的下一个主要版本仍将遵循Intranet站点,兼容性视图列表中的站点以及仅与企业模式一起使用时所服务的文档模式.

公共Internet站点将使用新的Edge模式平台进行渲染(忽略X-UA-Compatible).我们的目标是Edge从现在开始是"活的"文档模式,未来不会再引入文档模式.

由于Microsoft Edge中的更改在大多数情况下不再支持文档模式,因此Microsoft有一个工具来扫描您的站点以检查它是否具有与Edge不兼容的代码.

Chrome = 1 Info的IE

还有chrome=1,你可以使用或与像上述选项一起使用:<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">.chrome=1适用于Google的Chrome Frame,定义为:

Google Chrome Frame是一个开源浏览器插件.安装了插件的用户可以在浏览器中打开页面时访问Google Chrome的开放式Web技术和快速JavaScript引擎.

Google Chrome Frame可无缝增强您在Internet Explorer中的浏览体验.它使用Google Chrome的渲染技术显示支持Google Chrome Frame的网站,让您可以访问最新的HTML5功能以及Google Chrome的性能和安全功能,而不会以任何方式中断您常用的浏览器使用情况.

安装Google Chrome浏览器内嵌框架后,无需考虑即可让网络变得更好.

但是要使插件工作,您必须chrome=1X-UA-Compatible元标记中使用.

有关Chrome Frame的更多信息,请点击此处.

注意: 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标头在服务器级别执行此操作.微软称,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的回答bitinn的答案,了解有关如何设置HTTP标头的更多详细信息.

XHTML

<meta http-equiv="X-UA-Compatible" content="IE=Edge" />只要标签正确关闭(即/>vs >),使用时验证就没有问题.

Twitter Bootstrap

这个标签已经被强烈地引导团队至少自2014推荐,并Bootlint,由团队拼焊板撰写的棉短绒继续抛出一个警告省略标记时.linter区分警告和错误,因此省略此标记的严重性可能被认为是次要的.


有关详细信息,X-UA-Compatible请参阅Microsoft的网站定义文档兼容性.

有关IE支持的更多信息,请参阅caniuse.com.

有关Twitter Bootstrap要求的更多信息,请参阅bootlint项目Wiki页面.

  • 基本上会发生什么,当你有X-UA-Compatible它告诉IE如何表现你所设置的值(IE =边缘等)如果它不存在IE将显示网站它认为最好应该如何显示.这可能是兼容模式,也可能是IE的最新版本.无论微软/ IE认为什么是最好的.合理? (41认同)
  • 如果我在标题中没有"X-UA-Compatible",会发生什么? (36认同)
  • @AdrienBe - 我完全同意!到目前为止IE 10对我来说是最好的,但我鄙视任何其他版本.有一次我有一个页面设置,其中一些效果约200-300行HTML和约20分钟的编码.为了让IE工作,我不得不添加另外1000行代码(主要是第三方javascript)和2-3小时的工作!我真的很讨厌IE => (10认同)
  • Google Chrome Frame将于2014年1月停用:http://blog.chromium.org/2013/06/retiring-chrome-frame.html (8认同)
  • @TravisJ - 根据我的理解,可用的最高模式基本上意味着 IE 8 最多可以支持 IE8 模式,IE9 可以支持 IE9 模式等等。我为 Microsoft 提供的每种模式添加了一些定义。 (2认同)

oli*_*bre 328

使用content="IE=edge,chrome=1"   跳过其他X-UA-Compatible模式

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
                                   -------------------------- 
Run Code Online (Sandbox Code Playgroud)
  • 无兼容性图标
    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">
Run Code Online (Sandbox Code Playgroud)
  • IE=edge 意味着IE应该使用其渲染引擎的最新(边缘)版本
  • chrome=1表示IE应该使用Chrome渲染引擎(如果已安装)

或者更好地配置您的Web服务器:(
另请参阅RiaD的答案)


Microsoft建议使用IE11以来的Edge模式

正如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甚至在旧版本的Specifying遗留文档模式中注意到:

边缘模式仅用于测试目的; 不要在生产环境中使用它.

它是如此的令人困惑的是乌斯曼Ÿ认为克拉拉野驴是在说:

[...]示例仅供说明之用; 不要在生产环境中使用它.

<meta http-equiv="X-UA-Compatible" content="IE=7,9,10" >
Run Code Online (Sandbox Code Playgroud)

嗯......在这个答案的其余部分,我给出了更多的解释,为什么使用content="IE=edge,chrome=1"是一个很好的生产实践.


历史

多年(2000年至2008年),IE市场份额超过80%.IE v6被认为是事实上的标准(2003年,2004年,2005年和2006年仅IE6的市场份额为80%至97%,所有IE版本的市场份额更多).

由于IE6不符合Web标准,开发人员必须使用IE6测试他们的网站.对于微软(MS)而言,这种情况非常好,因为网络开发人员不得不购买 MS产品(例如,IE不能在不购买Windows的情况下使用),并且保持不合规更加盈利(即微软希望成为排除其他产品标准)公司).

因此,许多网站仅符合IE6标准,并且由于IE不符合Web标准,所有这些网站在符合标准的浏览器上都没有很好地呈现.更糟糕的是,许多网站只需要IE.

然而,在这个时候,Mozilla开始尽可能地尊重所有Web标准的Firefox开发(实现其他浏览器以呈现由IE6完成的页面).随着越来越多的Web开发人员想要使用新的Web标准功能,越来越多的网站受到Firefox的支持而不是IE.

当IE市场份额下降时,MS意识到保持标准不兼容并不是一个好主意.因此MS开始发布新的IE版本(IE8/IE9/IE10),越来越多的Web标准.


网络不兼容的问题

但问题是为IE6设计的所有网站:微软无法发布与这些旧IE6设计的网站不兼容的新IE版本.MS没有设计网站的IE版本,而是要求开发人员X-UA-Compatible在其网页中添加额外的数据().

IE6仍在2016年使用

如今,仍然使用IE6 (2016年为0.7%)(2014年1月为4.5%),一些互联网网站仍然符合IE6标准.一些Intranet网站/应用程序使用IE6进行测试.某些Intranet网站仅在IE6上100%正常运行.这些公司/部门倾向于推迟迁移成本:其他优先事项,没有人不再知道网站/应用程序是如何实现的,遗留网站/应用程序的所有者破产了......

中国占2013年IE6使用量的50%,但随着中国Linux发行版的播出,它可能会在未来几年内发生变化.

对您的网络技能充满信心

如果您(尝试)尊重Web标准,您可以随时使用http-equiv="X-UA-Compatible" content="IE=edge,chrome=1".要保持与旧浏览器的兼容性,请避免使用最新的Web功能:使用您要支持的最旧浏览器支持的子集.或者如果你想更进一步,你可以采用优雅降级,渐进增强不引人注目的JavaScript等概念.(您可能也很高兴阅读Web开发人员应该考虑什么?.)

不要关心最好的IE版本渲染:这不是你的工作,因为浏览器必须符合web标准.如果您的网站符合标准且使用适度的最新功能,则浏览器必须符合您的网站.

此外,由于有很多活动要杀死 IE6(不再是IE6,MS活动),现在你可以避免浪费时间进行IE测试!

个人IE6体验

在2009 - 2012年,我在一家使用IE6作为官方单一浏览器的公司工作.我不得不为IE6实现一个Intranet网站.我决定尊重Web标准,但使用支持IE6的子集(HTML/CSS/JS).

这很难,但是当公司改用IE8时,该网站仍然很好地呈现,因为我使用了Firefox和firebug来检查网络标准的兼容性;)

  • 请@ClaraOnager花一些时间来解释我的答案中的错误(从您的角度来看).即使MS不建议在生产环境中使用*Edge模式*,也有充分的理由在生产环境中使用它.从技术上澄清我们的最佳实践非常重要.我喜欢分享我的知识和经验.我也希望你.我们可以一起改进;)干杯 (5认同)
  • @ClaraOnager ...在您的第一个答案中,您指向的错误,在参考页面中.MS表示不在生产环境中使用:<meta http-equiv ="X-UA-Compatible"content ="IE = 7, 9,10">不是其他Edge的东西. (5认同)
  • 关于在生产环境中使用的边缘模式.来自Microsoft:`从IE11开始,边缘模式是首选的文档模式; 它代表了对浏览器可用的现代标准的最高支持 (3认同)
  • '边缘模式仅用于测试目的; 不要在生产环境中使用它.请参阅http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx (2认同)
  • 嗨@Ricardo,我同意你的看法.Microsoft称_"如果您希望所有受支持的Internet Explorer版本以标准模式打开您的页面,请使用[了解旧文档模式]部分中的HTML5 [...] _(http://msdn.microsoft.com /library/jj676915.aspx#DCModes)(参见**提示**).也许我的解释不清楚......也许我误解了一些事情......我改变了我的文字......你怎么看待我的改变?对你好吗?你有什么建议在我的回答中改变/改进?感谢您的反馈意见.干杯;-) (2认同)

and*_*otn 58

不同之处在于,如果仅指定DOCTYPE,则IE的兼容性视图设置优先.默认情况下,这些设置会强制所有Intranet站点进入兼容性视图DOCTYPE.还有一个复选框,可以为所有网站使用兼容性视图,无论如何DOCTYPE.

IE兼容性视图设置对话框

X-UA-Compatible覆盖兼容性视图设置,因此无论浏览器设置如何,页面都将以标准模式呈现.这迫使标准模式:

  • 内联网页面
  • 当计算机管理员选择"在兼容性视图中显示所有网站"作为默认大型公司,政府,大学时,外部网页
  • 当您无意中最终在Microsoft兼容性视图列表上
  • 用户已将您的网站手动添加到兼容性视图设置中的列表的情况

DOCTYPE单靠不能那样做; 无论如何,在这些情况下,您将最终处于兼容性视图模式之一DOCTYPE.

如果同时meta指定了标记和HTTP标头,则meta标记优先.

这个答案基于检查IE8,IE9IE10中决定文档模式的完整规则.请注意,查看DOCTYPE是决定文档模式的最后一个回退.

  • 我希望我可以一百次回答这个问题.拯救生命的屏幕抓住了.我输入血压降低...... (3认同)

Geo*_*kos 24

使用此命令强制IE隐藏地址栏中恼人的浏览器兼容性按钮:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Run Code Online (Sandbox Code Playgroud)

  • @ClaraOnager虽然微软说过,但并不一定意味着他们是对的.我已经使用了`<meta http-equiv ="X-UA-Compatible"content ="IE = edge,chrome = 1">``因为它出现的那天没有任何问题.实际上,我已经通过让用户的IE使用其最新引擎来渲染我们构建的页面,已经为我的团队和我自己节省了数百个麻烦.与您和Microsoft相反,我建议每个人都使用上面的元标记_every time_.只要IE还在,我们就会"被迫"使用这个元标记:p (9认同)
  • 为了更好的衡量,我使用`<meta http-equiv ="X-UA-Compatible"content ="IE = edge,chrome = 1">`和`chrome = 1`指令,因此它提示IE6,7,8用户安装/使用[Chrome Frame](http://www.chromium.org/developers/how-tos/chrome-frame-getting-started).甚至[HTML5 Boilerplate](https://github.com/h5bp/html5-boilerplate/blob/master/index.html#L8)也使用它. (3认同)

小智 23

由于我无法在标记的答案中添加评论,我将在此处发布.

除了正确的答案,你确实可以通过验证.由于此元标记仅针对IE,因此您需要做的是添加IE条件.

<!--[if IE]>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<![endif]-->
Run Code Online (Sandbox Code Playgroud)

这样做就像添加任何其他IE条件语句一样,只适用于IE,不会影响其他浏览器.

  • 不应使用条件注释除了针对<= IE9的HTML目标.(即使写了这个答案,这也是如此) (4认同)

小智 16

我认为微软的这张图解释了所有.为了告诉IE如何呈现内容,!DOCTYPE必须使用X-UA兼容的元标记.!DOCTYPE本身对更改IE文档模式没有影响.

在此输入图像描述

http://ie.microsoft.com/testdrive/ieblog/2010/Mar/02_HowIE8DeterminesDocumentMode_3.png

  • 这是包含IE9的更新版本.OMG ... http://ie.microsoft.com/testdrive/ieblog/2010/Jun/16_IEsCompatibilityFeaturesforSiteDevelopers_1.svg (3认同)
  • 这一个包括IE10:http://msdn.microsoft.com/en-us/library/ff406036%28v=vs.85%29.aspx不同的章节有各自独立的流程图...... (3认同)

bit*_*inn 11

为了完整起见,您实际上不必将其添加到HTML(在HTML5中是未知的http-equiv)

这样做,永远不要回头(apache的第一个例子,nginx的第二个例子)

Header set X-UA-Compatible "IE=Edge,chrome=1"

add_header X-UA-Compatible "IE=Edge,chrome=1";
Run Code Online (Sandbox Code Playgroud)

  • @HueiTan - 我认为海报说当你尝试使用[W3 Validator](http://validator.w3.org/check)验证页面时会抛出一个错误:`错误值X-UA兼容对于元素元的属性http-equiv. - 这并不意味着它不起作用.它只是无效的代码. (2认同)

Bip*_*was 8

只需说一句即可指示Internet Explorer使用其最新的呈现引擎

<meta http-equiv="x-ua-compatible" content="ie=edge">
Run Code Online (Sandbox Code Playgroud)


Ton*_*ado 7

<meta http-equiv="X-UA-Compatible" content="IE=Edge">
Run Code Online (Sandbox Code Playgroud)

要使此行按预期工作,请确保:

  1. 它是紧随其后的第一个元素 <head>
  2. 在元标记之前没有使用条件注释,例如在<html>元素上

否则一些IE版本会忽略它.

UPDATE

这两个规则已经过简化,但很容易记住和验证.尽管MSDN文档声明您可以在此之前放置标题和其他元标记,但我不建议这样做.

如何使用条件注释.

有趣的文章关于头部元素的顺序.(blogs.msdn.com,用于IE)

参考

MSDN文档:

X-UA-Compatible[...]必须出现在标题以外的元件和其他元元素的所有其他元件之前的网页(HEAD部分)的报头.


小智 5

如果您在与服务器相同的网络中使用网站,则尽管DOCTYPE,IE仍希望切换到兼容模式
添加meta http-equiv="X-UA-Compatible" content="IE=Edge" 会禁用此不必要的行为。