为啥不再使用 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">
人们的想法似乎是这与<meta charset="UTF-8">
一样重要和有用。
但是为什么呢?
根据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”区域中托管网站,否则几乎没有理由在您的网页中包含 <meta http-equiv="X-UA-Compatible" content="IE=edge">
,并且(根据 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 <!DOCTYPE
is present,使其更加毫无意义。
您可以亲眼看到 IE 决定使用哪种文档模式的流程:
如您所见,如果不存在 X-UA-Compatible
元标记或 HTTP 标头,它会检查用户的“兼容性视图”设置。如果用户没有您的网站,IE 会检查是否存在<!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,只要您在网络上,标题就很好,但是如果用户选择将页面保存在本地,那么您剩下的就是嵌入的<meta>
标签。这就是为什么将重要的标头也复制为 <meta>
标记通常是一种好习惯的原因。以上是关于为啥不再使用 X-UA-Compatible IE=Edge?的主要内容,如果未能解决你的问题,请参考以下文章
使用“X-UA-Compatible”为 IE8 模拟 IE7,但不为 IE9 模拟
对 X-UA-Compatible 标头使用“Edge”或“IE9”?
使用“X-UA-Compatible”模拟IE7 for IE8但不适用于IE9