为啥不再使用 X-UA-Compatible IE=Edge?

Posted

技术标签:

【中文标题】为啥不再使用 X-UA-Compatible IE=Edge?【英文标题】:Why use X-UA-Compatible IE=Edge anymore?为什么不再使用 X-UA-Compatible IE=Edge? 【发布时间】:2014-12-08 10:14:45 【问题描述】:

我最近参加了几门在线课程,但我仍然看到一些讲师默认将以下元标记添加到他们的文档顶部:

<meta http-equiv="X-UA-Compatible" content="IE=edge">

人们的想法似乎是这与&lt;meta charset="UTF-8"&gt; 一样重要和有用。

但是为什么呢?

根据Microsoft's Modern.ie documentation,这是“确保 Internet Explorer 使用最新引擎”的“最佳实践”。好的,很公平。

但是,如果您关注the flow diagram on MSDN,它清楚地表明没有X-UA-Compatible 信息的文档将被转发到用户的“兼容性视图”首选项和if that's not set then just follow the !DOCTYPE declaration。

换句话说,除非用户有一些兼容性视图设置,IE will just follow your !DOCTYPE and use the latest standards mode of your browser for rendering anyway...根本不需要X-UA-Compatible IE=Edge 声明。

正如 MSDN 所说:“Use the html5 document type declaration to enable edge mode”。

那么在什么情况下需要X-UA-Compatible IE=Edge

【问题讨论】:

【参考方案1】:

正如@David 的回答所指出的,除非您在“本地 Intranet”区域中托管网站,否则几乎没有理由在您的网页中包含 &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;,并且(根据 Microsoft's best practice recommendations)绝对没有理由将其包含在 HTML 中。 (你应该把它放在你的服务器配置或站点标题中——而不是放在 HTML 本身中。)

如果您正在考虑在项目中的任何位置使用X-UA-Compatible,请记住,兼容性视图仅影响 IE8、9 和 10。它仅在 IE8 中引入,在 IE11 中被禁用。

还要注意 IE11 是 the only officially supported version of IE at this time。所有旧版本都应该被认为是不安全的。

如果这还不足以说服您不要使用它,请考虑 Microsoft 声明 IE8 and above already automatically render in Standards Mode when a &lt;!DOCTYPE is present,使其更加毫无意义。

您可以亲眼看到 IE 决定使用哪种文档模式的流程:

如您所见,如果不存在 X-UA-Compatible 元标记或 HTTP 标头,它会检查用户的“兼容性视图”设置。如果用户没有您的网站,IE 会检查是否存在&lt;!DOCTYPE 声明。如果找到它,它会自动使用最新的标准模式(又名“EmulateIEx”)。如果没有,它会恢复到 Quirks 模式。

您不应该使用微软自己的“X-UA-Compatible”元标记的更多原因(强调我的):

当 Internet Explorer 遇到 X-UA-Compatible META 标签时,它会使用指定版本的引擎重新开始。 这会影响性能,因为浏览器必须停止并重新开始分析内容。

换句话说,它会减慢初始页面的渲染速度

X-UA-Compatible 指令是一种工具,允许应用程序在最新的 Internet Explorer 版本中运行同时对应用程序进行更新

它只是为临时使用而设计的。

最佳做法是 X-UA 兼容的 HTTP 标头。将指令添加到响应标头会告诉 Internet Explorer 在开始解析内容之前要使用什么引擎。这必须在网站的服务器中进行配置。

换句话说,如果你绝对需要,这里有better ways of implementing X-UA-Compatible。

从 2016 年 1 月 12 日开始,只有适用于受支持操作系统的最新 Internet Explorer 版本才能获得技术支持和安全更新。 Internet Explorer 11 是 Internet Explorer 的最后一个版本,将继续在 Windows 7、Windows 8.1 和 Windows 10 上获得安全更新、兼容性修复和技术支持。。 p>

IE11 是唯一的officially supported version of IE。

在您的 HTML 中包含 X-UA-Compatible 元标记的唯一原因是在您网站的 IE8、9 和 10 中覆盖用户的“兼容性视图”设置。在几乎所有情况下,用户都不会更改这些设置(为什么会这样?),现在甚至不再支持这些浏览器。

简而言之:这个标签已经过时了。

【讨论】:

那些流程图太棒了。 请注意,截至今天(10/16/2015),IE11中的compat按钮确实没有了,但它仍然可以在设置菜单中启用,所以它仍然存在一个潜在可能。我们今天使用它是因为我们基于 Web 的软件用于企业内部网,这些内部网具有需要兼容模式才能工作的遗留系统,因此我们必须解决这个问题。不过,关于 HTTP 标头的重要提示,谢谢! 由于仍然可以在 IE11 中启用兼容性视图并且企业客户正在这样做,因此标题/标签仍然有用。我可以看到为什么 HTTP 标头更好,但是如果标签位于 DOM 的最开头,则几乎没有什么害处,而且仅在没有以 Edge 模式启动的浏览器中。作为仅适用于偶尔陷入兼容性视图的用户的规定,我认为使用标签(就在 的顶部)并不是一个坏习惯。 @ChuckLeButt 或者他们的管理员通过组策略“为”他们完成了这项工作。在企业环境中仍然是一件非常重要的事情,这是我们最大的胜利,有一种方法可以覆盖它。 @ChuckLeButt 我明白你的意思并且没有windows-fu来反驳它......但是,我们的客户告诉我们他们的IE11全面处于兼容模式;他们是如何得到它的,并没有与我们分享真正的知识。有可能他们实际上一直把它放在一个明确的清单上。【参考方案2】:

只要将其设置为“Edge”,它就会验证为 HTML5,并且我被告知,如果站点已经在兼容模式下呈现页面,它只会导致 IE 重新呈现页面。不过,将其放入服务器配置(.htaccess 等)比放入每个页面的 HTML 更好。

【讨论】:

【参考方案3】:

如果用户正在浏览位于“本地 Intranet”区域(例如在公司 Intranet 上)的页面,则默认情况下会打开“兼容性视图”。这是我使用“X-UA-Compatible”强制IE使用最新引擎的时候。

【讨论】:

是的,这似乎是一个有效的用途,但在这种情况下,您可能希望将其放入服务器配置或站点的标题中? ***.com/a/9338959/199700 还有一个变化,部分原因是微软稍微弃用了兼容性视图。除了本地 Intranet,如果域上有很多子域和应用程序,则为子域添加兼容性视图现在会将其应用于整个域(之前它仅应用于特定子域)。因此,即使您只有一个可能需要它的应用程序,您也应该为所有其他应用程序这样做以避免支持问题。 @ChuckLeButt,只要您在网络上,标题就很好,但是如果用户选择将页面保存在本地,那么您剩下的就是嵌入的&lt;meta&gt; 标签。这就是为什么将重要的标头也复制为 &lt;meta&gt; 标记通常是一种好习惯的原因。

以上是关于为啥不再使用 X-UA-Compatible IE=Edge?的主要内容,如果未能解决你的问题,请参考以下文章

使用“X-UA-Compatible”为 IE8 模拟 IE7,但不为 IE9 模拟

对 X-UA-Compatible 标头使用“Edge”或“IE9”?

X-UA-Compatible

使用“X-UA-Compatible”模拟IE7 for IE8但不适用于IE9

什么是X-UA-Compatible?X-UA-Compatible的作用

什么是X-UA-Compatible?X-UA-Compatible的作用