121

在微软的网站上,他们声称简单的 doctype 声明就足够了。但即使是这么短的文档也会退回到 IE7 模式:

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

</body>
</html>

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

4

5 回答 5

245

Internet Explorer 假设大多数网页都是针对早期版本的 IE 编写的,并查看文档类型、元标记和 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 站点。了解 Internet Explorer 8 中的兼容性模式一文说明了以下内容。

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

但是,实际上这不起作用,使用主机标头是唯一有效的选项。文章的评论部分还显示了这个确切问题的许多示例。

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

添加 X-UA-Compatible 标头

如果您使用的是 .NET 和 IIS,您可以将其添加到 .NET 中,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。

于 2012-11-08T10:31:42.770 回答
25

这对我有用..

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
于 2013-05-24T09:41:52.923 回答
10

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

<meta http-equiv="X-UA-Compatible" content="IE=11,IE=10,IE=9,IE=8" />
于 2012-11-08T07:05:54.863 回答
2

元标记对 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。

于 2014-03-06T02:08:01.607 回答
1

当我执行以下操作时,它对我来说非常有效:

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

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

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

于 2014-02-25T17:17:06.980 回答