IE10在IE7模式下呈现。如何强制使用标准模式?

121

在微软的网站上,他们声称简单的文档类型声明就足够了。但即使像这样简短的文档也会降级到IE7模式:


<!DOCTYPE html>
<html>
<head>
   <title></title>
</head>
<body>

</body>
</html>

http://d.pr/i/fvzb+

5个回答

245
Internet Explorer认为大多数网页都是针对早期版本的IE编写的,并查看doctype、meta标签和HTML来确定最佳兼容模式(有时不正确)。即使使用了HTML5 doctype,如果是内部网站,IE仍然会将您的网站放在兼容模式中。
为确保您的网站始终使用最新的标准模式,您可以关闭“在兼容性视图下显示内部网站”选项。但是,您必须在每台与Web服务器本地连接的计算机上执行此操作(以下是说明)。
或者,更好的方法是使用X-UA-Compatible头文件从服务器关闭此选项。重要的是要注意,使用元标记将无效!
<!-- Doesn't always work! -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />

在MSDN中,提到使用主机头或元标记应该覆盖甚至是公司内部网站。文章“了解Internet Explorer 8中的兼容性模式”如下所述。
大量的内部业务网站都针对Internet Explorer 7进行了优化,因此这个默认的例外保留了该兼容性。 ... 同样,如果使用元标记或http头将兼容性模式设置为文档,则将覆盖这些设置。
然而,在实践中,这并不起作用,使用主机头是唯一有效的选项。该文章的评论部分还显示了许多此类问题的示例。
使用Meta标签还有一些其他问题,例如如果它不直接位于标签下方或者在它之前有太多数据(4k)时会忽略该标签。在某些版本的IE中,它还可能触发重新解析文档,从而减慢呈现速度。您可以在MSDN文章最佳实践:让您的HEAD有序中了解更多相关问题。
添加X-UA-Compatible头信息
如果您正在使用.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');

只要HTML5文档类型存在X-UA-Compatible头部,网站将始终在最新的标准模式下运行。
关闭兼容性视图 关闭兼容性视图可能仍然有用。要这样做,请取消选中“在兼容性视图中显示所有企业内部网站”选项。

Compatibility View Settings

你可以通过按下Alt键来打开菜单。

enter image description here

编辑 这个答案也适用于IE9。


2
@Nick使用alt键打开工具栏,它在工具->兼容性视图设置下面。 - Daniel Little
25
当用户在他们的问题中使用[IE]标签并包含“compatible”一词时,SO应该强制让每个OP在实际发布问题之前查看此答案。 - Teemu
元标签对我来说不是必需的。这个答案中的解决方案有效,但我不得不重新启动IE。 - Peter
2
我尝试将自定义头部部分添加到项目的web.config中。看起来该设置并没有覆盖IE在内部网站使用兼容性视图的设置。 - DomenicDatti
我编写了自定义JS和服务器端检测算法,以确定是否发生兼容模式,然后将用户重定向到一个页面,让他们可以禁用它...这解决了所有问题。我希望我能点赞10倍!!!非常感谢。 - Jeff Johnson
显示剩余13条评论

25

这对我有效。

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

11
正如Lavinski在上面所说,“元标记对内部网站没有任何作用。” - Nathan
2
说句实话,对于一个托管的网站(非内部网站),即使有“X-UA-Compatible”元标记,但仍未触发IE10标准文档模式作为页面默认模式,我发现如果元标记位于脚本标记下方或距离DOM树中的<head>太远,IE10会报错并将文档模式设置为IE8标准。因此,请将您的“IE=edge”元标记保持靠近<title>标记。对于WordPress网站,当它没有硬编码在头文件模板中时,这并不总是一个简单的修复方法。不确定IE11是否关心元标记的位置,但希望这对某人有所帮助。 - purefusion
1
对于像我这样的盲目复制粘贴者,缺少闭合标签。。<meta http-equiv="X-UA-Compatible" content="IE=edge"></meta> - John Newman
如果您使用的是XHTML doctype,那么您只需要关闭meta标签。 - Andy Brudtkuhl
你也可以在闭合的 '>' 前面添加 '/'。 - JacobTheDev
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 Li Huan
7
如果你按照规范操作,那就不会有风险,Chrome 用户也并没有这样做。 - Daniel Little
1
这个标签需要放在<head>标签的第一位。 - Chris Gunawardena
1
这个答案的编辑说明了为什么这不是一个好主意。被接受的答案是最佳解决方案。 - Just a guy
显示剩余3条评论

2
标签对于内部网站没有任何作用,我的问题是IE10在IE10兼容模式下渲染。对我有帮助的解决方法是采取@Jeow的答案并在HTTP头中使用该值,方法是在IIS下的web.config中添加以下内容:
<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浏览器,内部网站包括不会被外部路由的公共网站 - 例如,在办公室工作的Stackoverflow员工可能会在兼容模式下看到stackoverflow.com。


1

当我按照以下步骤操作时,它对我完美地起作用:

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

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

我的建议是将您的空代码替换为实际内容(简单的内容),然后查看其效果。


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