IE兼容模式:'X-UA-Compatible'标签'Edge'

56

我在<head>中有这个:

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

它会强制IE使用最新的渲染模式,但兼容模式是否被认为是最后一个模式呢?

我的意思是,例如:在IE8中使用此代码,它会强制IE8使用IE8或IE8兼容模式?


来自 MSDN 的内容:“由于边缘模式文档使用查看它们的 Internet Explorer 版本中可用的最高模式显示网页,因此建议您仅将此文档模式用于测试目的。不要将其用于生产用途。”(http://msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx) - Steven Berkovitz
4个回答

64

该标签将尝试强制浏览器使用其支持的最新呈现模式,它不会触发兼容性模式。

请注意,该标签必须是head中的第一个标签,否则它将无效。这个事实使HTTP标头更优秀,因为HTTP标头的顺序并不重要。

如果使用标头或meta标签后浏览器仍然以兼容性模式结束,则其中一件事情可能是引起这种情况的原因:

  • 您缺少合理的文档类型
  • 浏览器已设置为始终使用兼容性模式
  • 该网站托管在“内部网站”上,并且内部网站的默认设置已被设置

更改浏览器的兼容性视图设置

Microsoft认为至少192.168.x.x位于“内部网站”上。IE8/IE9中内部网站的默认设置是使用兼容性模式。对于许多企业应用程序来说,这是一个巨大的问题,因为即使使用此meta标签,程序员也无法覆盖此选项。(“在兼容性视图中显示内部网站”不能通过meta标签或http标头进行覆盖-在这种情况下,浏览器完全控制兼容性视图)。

兼容性视图设置

是否始终添加此meta标签或http标头?

使用此meta标签的另一个好处是,浏览器地址栏中的“兼容性视图”图标将被删除。至少您的用户不能使用该按钮决定呈现模式。


2
根据此http://ie.microsoft.com/testdrive/ieblog/2010/Mar/02_HowIE8DeterminesDocumentMode_3.png,它应该可以通过标头进行覆盖。 - Kees C. Bakker
不错,如果服务器托管在 192.168.x.x 范围内,它就可以工作。C# 或 vb 都可以。 - oldwizard
第三个要点是不正确的。我正在使用启用了“兼容模式”的IE8访问“内部网站”,但是meta标签正确地覆盖了该设置。 - Justin Skiles
你是否将网站托管在192.168.x.x范围内?Localhost/127.0.0.1不被视为内部网络,并且不强制使用该复选框运行兼容模式。 - oldwizard
1
不可重写?更让人憎恶IE的原因之一。 - Craig Tullis
显示剩余2条评论

2
即使您取消了“在兼容性视图中显示公司内部网站”选项,并且响应头中有X-UA-Compatible,浏览器仍然可能默认为“兼容性视图”的另一个原因是您的组策略。查看您的控制台以获取以下消息:
HTML1203:通过组策略配置了xxx.xxx以在兼容性视图中运行。
其中xxx.xxx是您网站的域名(即test.com)。如果您看到这个信息,则您的域的组策略被设置为任何以test.com结尾的站点都会自动以兼容模式呈现,无论doctype、headers等如何。
有关更多信息,请参见以下链接(解释html代码):http://msdn.microsoft.com/en-us/library/ie/hh180764(v=vs.85).aspx

通过测试,我发现兼容性视图组策略设置会强制Internet Explorer使用“Mozilla/4.0(compatible; MSIE 7.0; ...)”作为请求的用户代理,但X-UA-Compatible IE = Edge元标记将导致页面使用IE的实际用户代理进行呈现。因此,任何服务器端浏览器检测都将检测到IE 7,而客户端浏览器检测将检测到IE的实际版本。 - Gabby Paolucci

0

我不是专家,但通过尝试和错误:

<meta http-equiv="X-UA-Compatible" content="IE=8, IE=9, IE=edge"/>

这个解决方案对我很有帮助。我在网站和Web应用程序上使用它,它阻止了IE8进入兼容模式,并在IE10和IE11中显示为“标准”。


-3

使用独立的Edge关键字有什么意义?我的意思是,如果你想让IE使用最新的渲染引擎,那就直接删除整个meta标签。

否则,应该像这样设置(这将使IE8的行为类似于IE7,而IE9和更新版本将按照正常方式工作):

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, IE=Edge" />

1
你能否澄清一下或者提供一个链接来描述这个问题?在我看到的情况下,你要么指定IE=8(或其他数字)请求IE的行为接近于IE8,要么指定IE=edge请求IE实际使用版本的本地行为。 - Rasmus Kaj
@Rasmus,重点是,你实际上可以指定多个模式。这里是相关讨论(内有更多链接):https://dev59.com/sHA75IYBdhLWcg3wOGPS - unclenorton
3
为了避免用户启用兼容模式,使用Edge很有帮助,它可以规范IE的行为。兼容模式可能会破坏某些内容(如布局或Javascript),而Edge则可以完全避免这种情况。如果您不指定元标记,用户可以选择兼容模式并破坏您的页面。 - derickito
不确定为什么会有负评。unclenton很准确,他的评论也很好地解释了他的观点。我的使用情况是:我希望IE8在IE7下呈现,但我不想强制IE9和10这样做。 - donohoe
1
IE使用IE7文档模式显示内部网站。 IE = Edge(或其他设置)可以解决此问题。 - Sam
显示剩余2条评论

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