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

Posted

技术标签:

【中文标题】IE10 以 IE7 模式呈现。如何强制标准模式?【英文标题】:IE10 renders in IE7 mode. How to force Standards mode? 【发布时间】:2012-10-28 08:33:51 【问题描述】:

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

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

</body>
</html>

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

【问题讨论】:

【参考方案1】:

尝试在头部添加以下标签

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

【讨论】:

应该是IE=Edge 但未来版本的 IE 可能会做坏事并破坏您的网站 不,如果您遵循规范,这不是风险,您不会看到有人为 chrome 这样做。 这个标签需要是中的第一个标签 对此答案的编辑说明了为什么这不是一个好主意。接受的答案是最好的解决方案。【参考方案2】:

Internet Explorer 假设大多数网页都是针对早期版本的 IE 编写的,并查看文档类型、元标记和 HTML 以确定最佳兼容模式(有时不正确)。即使使用 HTML5 doctype,如果它是 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 站点。文章Understanding compatibility modes in internet explorer 8 说如下。

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

但是,实际上这不起作用,使用主机标头是唯一可行的选项。文章的 cmets 部分也展示了很多关于这个问题的例子。

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

添加 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');

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

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

您可以通过按 Alt 来调出此菜单。

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

【讨论】:

请原谅我的无知,但是如何访问此设置表?我检查了 Internet Explorer 设置,右键单击地址栏中的兼容性视图 - 没有。 @Nick 使用alt 调出工具栏,它在工具-> 兼容视图设置下 哦,谢谢,看来解决了。让人想知道他们为什么要这样做。 +1000 ;)。当他们的问题中有任何 [IE] 标签和“兼容”一词时,即使在他们实际发布该问题之前,SO 应该强制每个 OP 看到这个答案。 我尝试将自定义标题部分添加到项目的 web.config 中。似乎该设置不会覆盖 IE 设置以使用 Intranet 站点的兼容性视图。【参考方案3】:

这对我有用..

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

【讨论】:

注:正如 Lavinski 上面所说,“元标记对 Intranet 站点没有任何作用。” 对于具有 X-UA-Compatible 元标记的托管网站(非 Intranet 站点)而言,它仍然没有触发 IE10 标准文档模式作为页面默认值,我发现如果元标记位于脚本标记下方或距离 DOM 树中的 &lt;head&gt; 顶部太远,IE10 哭泣并将文档模式设置为 IE8 标准。因此,请将您的IE=edge 元标记靠近&lt;title&gt; 标记。当 Wordpress 网站没有在头模板文件中硬编码时,它并不总是一个简单的修复。不确定 IE11 是否关心元标记的位置,但希望这对某人有所帮助。 对于像我这样的盲目复制和粘贴,缺少结束标记。 . 如果你使用的是 XHTML doctype,你只需要关闭 meta 标签 另外这个标签需要是里面的第一个标签【参考方案4】:

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

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

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

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

【讨论】:

【参考方案5】:

元标记对 Intranet 站点没有任何作用,我的问题是 IE10 在 IE10 兼容模式下呈现。对我来说解决这个问题的方法是进一步采用@Jeow's answer,并通过在 IIS 下的web.config 中添加以下内容来在 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 站点包括未路由到外部的面向公众的站点 - 例如,在办公室工作的 *** 员工可能会在兼容模式下看到 ***.com。

【讨论】:

以上是关于IE10 以 IE7 模式呈现。如何强制标准模式?的主要内容,如果未能解决你的问题,请参考以下文章

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

添加http头以强制IE8以IE7模式呈现(PHP版本)

添加http头以强制IE8在IE7模式下呈现

如何强制 IE10 以 IE9 文档模式呈现页面

PHP 添加http标头以强制IE8在IE7模式下呈现(PHP-Version)

与在 IE8 浏览器中以 IE7 标准模式呈现的相同页面相比,在 IE7 中呈现的页面是不是会有任何差异?