“<meta http-equiv='X-UA-Compatible' content='IE=edge'>”的误解

3

我无法理解meta http-equiv="X-UA-Compatible" content="IE=edge的实际作用。

1) 如果某些用户使用某个版本的IE浏览器打开一个具体网页,该网页将在用户拥有的IE版本(最新版本)中打开。我不明白为什么我们需要这个标签来维护这一点?

2) 如果用户明确表示他的IE浏览器(例如IE9)希望以某个先前的IE版本(例如IE8)打开浏览器页面,那么这个元标记会阻止吗?

3) 如果我使用IE7或IE8,并且这个页面有一个meta标签,那么该页面将在我的计算机上已经拥有的最新版本的浏览器中打开,取决于我已经安装的IE7或IE8浏览器版本。

我真的看不出这个meta标签的用途(除了用户已经调整新版浏览器以打开旧版网页的情况),或者我错过了什么。

5个回答

6

请参阅 Microsoft 文档:

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

注意:Edge模式仅用于测试目的;不要在生产环境中使用它。由于它强制所有页面以标准模式打开,而不考虑Internet Explorer的版本,您可能会被诱惑在Internet Explorer中查看的所有页面中使用它。不要这样做,因为仅从Windows Internet Explorer 8开始支持X-UA-Compatible头。
这意味着它仅用于快速测试当前限制特定版本的网站的最新IE版本。
要永久使用最新版本,请改用HTML5文档类型:<!DOCTYPE html>。请参见文章介绍中的内容:
在大多数情况下,我们建议网站使用HTML5文档类型来支持最广泛的已建立和新兴标准,以及最广泛的Web浏览器范围。 编辑: 我刚在另一个SO帖子中注意到this answer。这表明,如果用户由于某种原因在兼容性模式下运行IE,则您可以通过设置X-UA-Compatible = EDGE来覆盖此设置。这意味着,如果您知道使用最新标准可以显示页面最佳,则可以强制IE在边缘模式下运行,即使用户已激活兼容性模式。有关兼容性模式可能已被激活的不同方法的详细信息,请参见the other answer
作为此操作的额外效果,当您设置X-UA-Compatible = EDGE时,IE还将隐藏地址栏中的兼容性按钮。

我们的页面上已经有了“<!DOCTYPE html>”,客户要求添加这个meta标签,并询问了该标签的风险。我真的看不出这个meta标签对网站有任何改进。为了测试:我需要安装最新版本的IE来查看我的网站在最新版本的IE中的行为。如果我没有最新版本的IE,那么这个meta标签将无法给我任何东西。另一方面,如果我已经拥有了最新版本的IE,网站将在最新版本的IE中打开(无论是否有meta标签),我也看不到这个meta标签的目的。 - Milos
看看我刚刚做的修改。通常情况下,覆盖用户设置并不是一件好事,并且可能是微软建议不要使用它的原因。但在某些情况下,可能有很好的理由这样做,特别是如果这是一个内部网站。IE中有一个设置可以在兼容模式下显示内部网站,由于某种原因,默认情况下已经打开了! - awe
这个元标签不应再使用:“从IE11开始,文档模式被视为已弃用,不应再使用。”(参见Awe的链接:http://msdn.microsoft.com/en-us/library/jj676915.aspx) - CedX
@CédricBelin:是的,你说得对,但人们仍然使用旧版本。我们已经做出公司决定,只支持IE9及以上的新开发Web应用程序,但这仍然是一个问题。如果您为现代标准设计您的网页,包含这个meta标签仍然很有用,以确保它在某些用户打开兼容模式的情况下正常运行。 - awe

6

"如果某些用户使用某个版本的IE尝试打开具体页面,则该页面将在用户拥有的IE版本(最新版本)中打开。我不明白为什么需要该标记来维护这一点?"

IE 8 *及更高版本具有多个渲染引擎。IE选择为特定页面使用哪一个取决于几个因素。有时它默认使用旧模式,因此即使您使用的是IE10,它也可以在IE7兼容视图中打开特定页面。

如果您在页面上使用标准的html5 doctype,例如<!DOCTYPE html>,那么您会认为您不必担心,在网络上这或多或少是正确的。但是,由于没有任何人能理解微软公司外部的原因,如果IE在内部网络上打开页面,则默认为较旧的兼容性视图,即使指定了html5 doctype。

使用您提到的<META>标记告诉IE始终使用其最新的("edge")渲染引擎。

"2) 如果用户明确表示他的IE(例如IE9)想要将浏览器页面打开为一些先前的IE版本(例如IE8),那么这个元标记是否会防止它?"

不会。用户仍然可以使用内置的开发工具来更改文档模式。

"3) 如果我有IE7或IE8,而此页面具有meta标记,那么该页面将在IE7或IE8中打开,这取决于我计算机上已经拥有的浏览器版本的最新情况."

是的。当然,IE8无法以IE9模式打开页面。但是,如上所述,该元标记告诉您正在使用的任何版本的IE使用其最新模式,而不是(可能)默认为旧模式。

*或者是IE 7及更高版本?我忘了。


2

接受它的无谓...

正如其他人所说,不使用这个标签会在地址栏中引发兼容性视图图标(一个符号化的损坏页面图标,旁边是重新加载和停止)。即使是在完全符合 W3C 有效验证的 <!DOCTYPE html> HTML5 页面上也会出现此问题。看到这个图标可能会引起用户按下它。这确实会导致怪僻模式,因此填充<=>宽度计算会变成过去的日子,您的页面会看起来很糟糕。(做得好,微软,这真的很有帮助...)

因此,这个标签可以帮助抑制它。

google.com 也使用了边缘标志(尽管他们强烈主张“正确”的HTML5,是吧?) nytimes.com 没有使用边缘标志。结果-兼容性标志。

仔细观察 HTML5 推广网站... html5boilerplate.com没有图标,没有元标记,但是在HTTP头中存在。

简而言之:看起来没有好的解决方法。 非用户面对、肤浅/丑陋的标记比任何用户面对的东西更好,因为这可能会使您的页面看起来更糟糕或似乎无效(作为最终用户,每当提供任何类似的“兼容性视图”时,我都会得出这样的结论)


2

1
您可以将此添加到您的 .htaccess 文件中。
<IfModule mod_headers.c>
    Header set X-UA-Compatible "IE=edge"
    # `mod_headers` can't match based on the content-type, however, we only
    # want to send this header for HTML pages and not for the other resources
    <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svgz?|ttf|vcf|webapp|webm|webp|woff|xml|xpi)$">
        Header unset X-UA-Compatible
    </FilesMatch>
</IfModule>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接