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 标签还有其他几个问题,例如如果标签不在 <head>
标签的正下方,或者在它之前有太多数据 (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 树中的 <head>
顶部太远,IE10 哭泣并将文档模式设置为 IE8 标准。因此,请将您的IE=edge
元标记靠近<title>
标记。当 Wordpress 网站没有在头模板文件中硬编码时,它并不总是一个简单的修复。不确定 IE11 是否关心元标记的位置,但希望这对某人有所帮助。
对于像我这样的盲目复制和粘贴,缺少结束标记。 .
如果你使用的是 XHTML doctype,你只需要关闭 meta 标签
另外这个标签需要是里面的第一个标签【参考方案4】:
当我执行以下操作时,它对我来说非常有效:
开启http://msdn.microsoft.com/en-us/library/gg699338(v=vs.85).aspx
使用他们在第一个框中提供的确切示例(在底部添加了缺少的</html>
),在 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 模式呈现。如何强制标准模式?的主要内容,如果未能解决你的问题,请参考以下文章