IE10在IE7模式下渲染。如何强制标准模式?


Answers:


244

Internet Explorer假定大多数网页都是针对IE的早期版本编写的,并查看doctype,meta标签和HTML以确定最佳的兼容模式(有时是错误的)。如果是Intranet网站,即使使用HTML5 doctype,IE仍会将您的网站置于兼容模式。

为确保您的网站始终使用最新的标准模式,您可以确保已将其Display intranet sites in Compatibly关闭。但是,您必须在Web服务器本地的每台计算机上执行此操作(以下说明)。

另外,更好的是,您可以使用X-UA-Compatible标头将其从服务器上关闭。重要的是要注意,使用meta标签将不起作用!

<!-- Doesn't always work! -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />

在整个MSDN中,都提到使用主机头或元标记甚至应覆盖Intranet站点。文章了解Internet Explorer 8中的兼容模式指出以下内容。

大量内部业务网站针对Internet Explorer 7进行了优化,因此此默认异常保留了该兼容性。...同样,如果使用元标记或http标头设置文档的兼容模式,它将覆盖这些设置。

但是,实际上这是行不通的,使用主机头是唯一可行的选项。本文的评论部分还显示了许多有关此确切问题的示例。

使用元标记还存在其他一些问题,例如如果标记不在标记的正下方<head>或它之前有太多数据(4k),则忽略该标记。它还可能会触发在某些版本的IE中重新解析文档,这会降低渲染速度。您可以在MSDN文章“ 最佳实践:按顺序获取您的HEAD”上阅读有关这些问题的更多信息。

添加与X-UA兼容的标头

如果您使用的是.NET和IIS,则可以将其添加到中web.config,也可以通过编程方式执行此操作:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="X-UA-Compatible" value="IE=edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

如果您不使用IIS,则可以轻松使用任何语言进行操作。例如,以下是在PHP中的操作方法:

header('X-UA-Compatible: IE=edge');

只要X-UA-Compatible标头与HTML5文档类型一起出现,网站将始终以最新的标准模式运行。

关闭兼容性视图关闭兼容性视图
可能仍然有用。为此,请取消选中Display all intranet sites in compatibility view“兼容性视图设置”。

兼容性视图设置

您可以通过点击Alt来显示菜单。

在此处输入图片说明

编辑 此答案也与IE9有关。


请原谅我的无知,但如何进入此设置表?我检查了Internet Explorer的设置,右键单击地址栏中的兼容性视图-没什么。
firedev

2
@Nick用来调alt出工具栏,它在工具下->兼容视图设置
Daniel Little

哦,谢谢,看起来已经解决了。令他们惊讶的是,为什么他们根本不这样做。
firedev 2012年

25
+1000;)。因此,当他们在问题中带有任何[IE]标签和单词“ compatible”时,甚至在他们实际发布该问题之前,SO都应强迫每个OP看到此答案。
Teemu

2
我尝试将自定义标头部分添加到项目的web.config中。似乎该设置不会覆盖IE设置,以将Intranet网站使用兼容性视图。
DomenicDatti13年

25

这对我有用。

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

11
NB如Lavinski所说:“ meta标记对Intranet网站没有任何作用。”
内森2013年

2
就其价值而言,对于具有X-UA-Compatiblemeta标签但仍未将IE10标准文档模式作为Page Default触发的托管网站(非Intranet站点),我发现如果meta标签位于脚本标签下面或仅仅是<head>IE10距DOM树顶部的距离太远,它哭泣并将文档模式设置为IE8标准。因此,请保持您的IE=edge元标记接近<title>标记。如果不是在标题模板文件中硬编码,则对Wordpress网站的修复并非总是简单的。不确定IE11是否关心元标记在哪里,但希望这对某人有帮助。
purefusion

1
对于像我这样的盲目复制和粘贴,缺少结束标记。。<meta http-equiv =“ X-UA-Compatible” content =“ IE = edge”> </ meta>
John Newman 2014年

仅在使用XHTML文档类型时才需要关闭meta标签
Andy Brudtkuhl 2014年

2
此外,此标签还必须是<head>内部的第一个标签
Chris Gunawardena

10

尝试将以下标签添加到头部

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

5
那应该IE=Edge改为
Daniel Little

1
但是有一个风险,即IE浏览器的未来版本做了坏事,打破你的网站
Jeow李欢

7
不,如果您遵循规范,那不是没有风险,您不会看到有人为chrome这样做。
丹尼尔·利特尔

1
该标签必须是<head>内部的第一个标签
Chris Gunawardena 2014年

1
对这个答案的编辑说明了为什么这不是一个好主意。公认的答案是最好的解决方案。
David Granado 2014年

2

meta标签对Intranet网站没有任何作用,我的问题是在IE10兼容模式下进行IE10渲染。为我解决问题的方法是进一步@Jeow的答案,并通过web.config在IIS下添加以下内容在http标头中使用该值:

<system.webServer>
  <httpProtocol> 
    <customHeaders> 
      <clear />
      <!-- <add name="X-UA-Compatible" value="IE=edge" /> not good enough -->
      <add name="X-UA-Compatible" value="IE=11,IE=10,IE=9,IE=8" /> 
    </customHeaders> 
  </httpProtocol>
</system.webServer>

出于IE的目的,Intranet站点包括未路由到外部的面向公众的站点-例如,在办公室工作的Stackoverflow员工可能会在兼容模式下看到stackoverflow.com。


1

当我进行以下操作时,它对我来说非常理想:

http://msdn.microsoft.com/zh-cn/library/gg699338(v=vs.85).aspx上

使用了他们在第一个框中提供的确切示例(</html>在底部添加了缺少的内容),在IE10中将其打开,并强制使用了标准,我想您可能需要html中的实际内容来强制标准,但不确定。

我的建议是将您的空代码替换为实际的内容(简单一些),然后看看它能做什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.