1616

如果一个网页以

<!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 版本中以大多数标准模式呈现。

4

12 回答 12

1845

2021 年 11 月更新

由于这个答案现在已有 10 多年的历史,我的建议是完全不使用这个标签,除非您必须支持旧的旧版浏览器。

2015 年 10 月更新

这个答案是几年前发布的,现在问题真的应该是您是否应该考虑X-UA-Compatible在您的网站上使用该标签?微软对其浏览器所做的更改(更多内容见下文)。

根据您支持的 Microsoft 浏览器,您可能不需要继续使用该X-UA-Compatible标签。如果您需要支持 IE9 或 IE8,那么我建议使用标签。如果您只支持最新的浏览器(IE11 和/或 Edge),那么我会考虑完全删除这个标签。如果您使用 Twitter Bootstrap 并且需要消除验证警告,则此标签必须按其指定的顺序出现。以下附加信息:


元标记允许 Web作者X-UA-Compatible选择页面应呈现为哪个版本的 Internet Explorer。IE11 对这些模式进行了更改;请参阅下面的 IE11 注释。取代 IE11 的浏览器Microsoft EdgeX-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 在标准模式下显示的一样,无论页面是否包含 <!DOCTYPE> 指令。
  • 模拟 IE9 模式告诉 Internet Explorer 使用 <!DOCTYPE> 指令来确定如何呈现内容。标准模式指令以 IE9 模式显示,怪癖模式指令以 IE5 模式显示。与 IE9 模式不同,Emulate IE9 模式尊重 <!DOCTYPE> 指令。
  • 模拟 IE8 模式告诉 Internet Explorer 使用 <!DOCTYPE> 指令来确定如何呈现内容。标准模式指令以 IE8 模式显示,怪癖模式指令以 IE5 模式显示。与 IE8 模式不同,Emulate IE8 模式尊重 <!DOCTYPE> 指令。
  • 模拟 IE7 模式告诉 Internet Explorer 使用 <!DOCTYPE> 指令来确定如何呈现内容。标准模式指令以 Internet Explorer 7 标准模式显示,怪癖模式指令以 IE5 模式显示。与 IE7 模式不同,Emulate IE7 模式尊重 <!DOCTYPE> 指令。对于许多网站来说,这是首选的兼容模式。
  • 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

来自微软

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

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

<!doctype html>

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

从 IE11 开始,文档模式已被弃用,不应再使用,除非是临时使用。确保更新依赖旧功能和文档模式的站点以反映现代标准。

如果您必须以特定文档模式为目标,以便您的站点在您对其进行改造以支持现代标准和功能时正常运行,请注意您正在使用一种过渡功能,该功能可能在未来的版本中不可用。

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

Microsoft Edge(替代与 Windows 10 捆绑的 Internet Explorer)

X-UA-Compatible有关“Edge”版本 IE 的元标记的信息。来自微软

引入“生活”边缘文档模式

正如我们在 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适用于谷歌的 Chrome 框架,定义为:

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

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

安装 Google Chrome Frame 后,网络会变得更好,而无需您考虑。

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

可以在此处找到有关 Chrome Frame 的更多信息。

注意: Google Chrome Frame 仅适用于IE6 到 IE9,并于 2014 年 2 月 25 日停用。更多信息可以在这里找到。感谢@mck 提供链接。

验证:

HTML5

只有在使用<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 标头在服务器级别执行此操作。作为注释,微软说,有关如何设置 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 的答案。

XHTML

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

Twitter Bootstrap(V3 及以下)

至少从 2014 年开始,Bootstrap 团队就强烈推荐此标签,并且当标签被忽略时,由twbs团队编写的 linter Bootlint 继续抛出警告。linter 区分警告和错误,因此忽略此标记的严重性可能被认为是次要的。


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

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

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

于 2011-07-21T05:22:20.820 回答
359

使用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 的正确性
    渲染/执行更有效(更好)。

  • 性能 Trident 渲染引擎
    在其边缘模式下应该运行得更快。


用法

在您的 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 的答案

  • pixeline提出的Apache

    <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>
    
  • Stef 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>
    

微软自 IE11 起推荐Edge 模式

正如Lynda所注意到的(请参阅评论),IE11 中的兼容性更改建议使用Edge 模式

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

但微软的立场并不明确。另一个MSDN 页面不推荐Edge 模式

因为边缘模式强制所有页面都以标准模式打开,无论 Internet Explorer 的版本如何,您可能都想将其用于使用 Internet Explorer 查看的所有页面。不要这样做,因为X-UA-Compatible仅从 Windows Internet Explorer 8 开始支持标头。

相反,微软建议使用<!DOCTYPE html>

如果您希望所有受支持的 Internet Explorer 版本都以标准模式打开您的页面,请使用 HTML5 文档类型声明 [...]

正如里卡多解释的(在下面的评论中),任何 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被认为是事实上的标准( 2003 年2004 年、2005 年和 2006年仅 IE6 的市场份额为 80% 至 97% ,所有 IE 版本的市场份额都更高)。

由于 IE6 不尊重Web 标准,开发人员不得不使用 IE6 测试他们的网站。这种情况对微软 (MS) 来说非常好,因为 Web 开发人员必须购买MS 产品(例如,不购买 Windows 就无法使用 IE),并且保持不合规更有利可图(即微软希望成为排除其他标准标准)公司)。

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

然而,在这个时候,Mozilla 开始尽可能尊重所有 Web 标准的 Firefox 开发(其他浏览器被实现为像 IE6 那样呈现页面)。随着越来越多的 Web 开发人员希望使用新的 Web 标准功能,越来越多的网站受到 Firefox 的支持而不是 IE。

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


网络不兼容问题

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

2016年还在用IE6

如今,仍在使用 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 实现一个 Intranet 网站。我决定尊重网络标准,但使用支持 IE6 的子集(HTML/CSS/JS)。

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

于 2012-01-20T13:55:25.243 回答
62

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

IE 兼容性视图设置对话框

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

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

DOCTYPE一个人是做不到的;在这些情况下,无论DOCTYPE.

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

此答案基于检查IE8IE9IE10中决定文档模式的完整规则。请注意,查看DOCTYPE是决定文档模式的最后一个后备。

于 2013-03-25T19:57:58.143 回答
27

使用它来强制 IE 隐藏地址栏中那个烦人的浏览器兼容性按钮:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
于 2012-02-13T09:25:03.597 回答
26

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

除了正确答案之外,您确实可以对此进行验证。由于此元标记仅针对 IE,您需要做的就是添加 IE 条件。

<!--[if IE]>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<![endif]-->

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

于 2014-06-15T14:38:57.500 回答
19

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

在此处输入图像描述

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

于 2012-11-05T19:40:53.700 回答
14

一句话就说指导 Internet Explorer 使用其最新的渲染引擎

<meta http-equiv="x-ua-compatible" content="ie=edge">
于 2017-11-08T18:53:37.053 回答
12

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

这样做并且永不回头(第一个例子是apache,第二个例子是nginx

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

add_header X-UA-Compatible "IE=Edge,chrome=1";
于 2013-02-27T07:11:19.443 回答
8
<meta http-equiv="X-UA-Compatible" content="IE=Edge">

要使这条线按预期工作,请确保:

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

否则一些 IE 版本会直接忽略它。

更新

这两条规则被简化了,但它们很容易记住和验证。尽管 MSDN 文档声明您可以在此之前放置标题和其他元标记,但我不建议这样做。

如何使它与条件注释一起工作。

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

参考

MSDN 文档

[ X-UA-Compatible...] 必须出现在网页的标题(HEAD 部分)中,位于除标题元素和其他元元素之外的所有其他元素之前。

于 2013-09-17T14:03:52.320 回答
5

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

于 2013-03-22T15:07:55.090 回答
3

这是从字面上看 1 个谷歌查询,但这里是:

http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx

了解旧文档模式

使用以下值以边缘模式显示网页,这是 Internet Explorer 支持的最高标准模式,从 Internet Explorer 6 到 IE11。

<meta http-equiv="x-ua-compatible" content="IE=edge"

请注意,这在功能上等同于使用 HTML5 文档类型。它将 Internet Explorer 置于支持的最高文档模式。Edge most 对于定期维护的网站最有用,这些网站会定期测试多个浏览器(包括 Internet Explorer)之间的互操作性。

注意 从 IE11 开始,边缘模式被视为首选文档模式。(在早期版本中,它被认为是实验性的。)要了解更多信息,请参阅文档模式已弃用。从 Windows Internet Explorer 8 开始,一些 Web 开发人员使用边缘模式元元素来隐藏地址栏上的兼容性视图按钮。从 IE11 开始,不再需要该按钮,因为该按钮已从地址栏中删除。因为它强制所有页面以标准模式打开,无论 Internet Explorer 的版本如何,您都可能想对使用 Internet Explorer 查看的所有页面使用边缘模式。不要这样做,因为 X-UA-Compatible 标头仅从 Internet Explorer 8 开始受支持。

提示 如果您希望所有受支持的 Internet Explorer 版本都以标准模式打开您的页面,请使用 HTML5 文档类型声明,如前面的示例所示。

搜索结果中还有:

于 2015-09-24T10:05:46.260 回答
3

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从我一直在处理的所有文件中删除标签。

如果此信息已过时或不再相关,请更正我。

于 2017-12-19T18:56:18.223 回答