IE10以IE7模式呈现。如何强制标准模式?

时间:2012-11-08 07:01:53

标签: windows internet-explorer windows-8 internet-explorer-10

在微软的网站上,他们声称简单的doctype声明就足够了。但即使是像这样简短的文件又回归到IE7模式:

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

</body>
</html>

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

5 个答案:

答案 0 :(得分:243)

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

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

或者更好的是,您可以使用X-UA-Compatible标头将其从服务器关闭。重要的是要注意使用元标记的不起作用!

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

在整个MSDN中,提到使用主机头或元标记应该覆盖intranet sites。文章Understanding compatibility modes in internet explorer 8说明了以下内容。

  

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

但是,实际上这不起作用,使用主机头是唯一有效的选项。本文的评论部分还展示了这个确切问题的大量例子。

使用Meta标签还有其他几个问题,例如如果标签不在<head>标签下面或者前面有太多数据(4k),则忽略标签。它还可能触发在某些IE版本中重新分析文档,这将减慢渲染速度。您可以在MSDN文章Best Practice: Get your HEAD in order上阅读有关这些问题的更多信息。

添加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 doctype一起出现,网站将始终以最新的标准模式运行。

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

Compatibility View Settings

您可以点击alt来获取菜单

enter image description here

修改 这个答案也适用于IE9

答案 1 :(得分:25)

这对我有用..

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

答案 2 :(得分:10)

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

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

答案 3 :(得分:2)

元标记对Intranet站点没有任何作用,我的问题是IE10兼容模式下的IE10渲染。解决这个问题的方法是进一步使用@Jeow's answer并在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目的,Intranet站点包括不向外部路由的面向公众的站点 - 例如,从办公室工作的Stackoverflow员工可能会在兼容模式下看到stackoverflow.com。

答案 4 :(得分:1)

当我完成下列内容时,它对我来说非常有用:

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

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

我的建议是用实际内容(简单的东西)替换你的空代码,看看它是做什么的。