问题描述
我正在为在所有内部网站上强制兼容性模式的客户端工作。我想知道是否有一个标签,我可以放入我的 HTML,强制兼容模式关闭。
最佳解决方案
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>My Web Page</title>
</head>
<body>
<p>Content goes here.</p>
</body>
</html>
从链接的 MSDN 页面:
Edge mode tells Windows Internet Explorer to display content in the highest mode available, which actually breaks the 「lock-in」 paradigm. With Internet Explorer 8, this is equivalent to IE8 mode. If a (hypothetical) future release of Internet Explorer supported a higher compatibility mode, pages set to Edge mode would appear in the highest mode supported by that version; however, those same pages would still appear in IE8 mode when viewed with Internet Explorer 8.
但是,在生产中不鼓励使用”edge” 模式:
It is recommended that Web developers restrict their use of Edge mode to test pages and other non-production uses because of the possible unexpected results of rendering page content in future versions of Windows Internet Explorer.
我真的不完全明白为什么。但是根据这一点,目前最好的方法是使用 IE=8
。
次佳解决方案
经过多少小时的故障排除这些东西… 这里有一些快速的亮点,帮助我们从 X-UA-Compatible
文档:http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx#ctl00_contentContainer_ctl16
使用<meta http-equiv="X-UA-Compatible" content=" _______ " />
-
标准用户代理模式 (non-emulate) 忽略了您的页面中的
<!DOCTYPE>
指令,并根据该版本的 IE 支持的标准进行渲染 (例如,IE=8
将更好地遵守表边框间距和一些伪选择器比IE=7
) 。 -
而 Emulate 模式告诉 IE 遵循您页面中的任何
<!DOCTYPE>
指令,根据您选择的版本渲染标准模式和基于IE=5
的奇怪模式 -
content
属性的可能值为:content="IE=5"
content="IE=7"
content="IE=EmulateIE7"
content="IE=8"
content="IE=EmulateIE8"
content="IE=9"
content="IE=EmulateIE9"
content="IE=edge"
content="IE=edge"
第三种解决方案
如果您正在使用 Intranet Zone 中的一个页面,您可能会发现 IE9 无论您做了什么,都将进入 IE7 兼容模式。
这是因为 IE 兼容性设置中的设置表示所有 Intranet 站点都应以兼容模式运行。您可以通过组策略 (或者在 IE 中简单的解除它) 来取消选择,也可以设置以下内容:
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
这样做 (如其他答案中所述),但可能最初不会显示:它需要在声明样式表之前。如果不这样做,那就被忽略了。
第四种方案
我相信这会做的诀窍:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
第五种方案
元标记解决方案不适用于我们,但在响应头中设置它:
header('X-UA-Compatible: IE=edge,chrome=1');
第六种方案
如本 answer 中提到的相关问题,可以在 Web.Config 文件中设置”edge” 模式。这将使其适用于从应用程序返回的所有 HTML,而无需将其插入到单独的页面中:
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
也可以通过 modifying the “HTTP Response Headers” using IIS Manager 为 IIS 服务器,整个网站或特定应用程序完成同样的步骤。
第七种方案
基于我最近的经验,还有几个关于这个话题的笔记。我工作的大学问题笔记本电脑与 IE 8 设置为所有 Intranet 网站的兼容性模式。我尝试添加元标记,以禁用此模式为我的网站提供的网页,但 IE 始终忽略此标记。正如兰斯在他的帖子中所说,添加一个响应标题来解决这个问题。这是我如何根据 HTML5 样板方法设置头文件:
<IfModule mod_headers.c>
Header set X-UA-Compatible "IE=edge,chrome=1"
# mod_headers can't match by content-type, but we don't want to send this header on *everything*...
<FilesMatch ".(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webm|webp|woff|xml|xpi)$">
Header unset X-UA-Compatible
</FilesMatch>
</IfModule>
为了实际发送此标题,您必须确保在 Apache 中已启用 mod_headers 。如果你想确保你打开这个 mod,把它放在一个可以运行 php 的页面中:
<pre>
<?php
print_r(apache_get_modules());
?>
</pre>
第八种方案
IE8 默认为 intRAnet 的 intERnet 和 quirks 模式的标准模式。如果您将 doctype 设置为 xhtml 过渡,则会忽略 HTML 元标记。解决方案是在代码中添加一个 HTTP 头。这对我们有用。现在我们的内部网站强制 IE8 以标准模式呈现应用程序。
添加到基页类 (ASP.net C#) 的 PageInit:Response.AddHeader(“X-UA-Compatible”,”IE=EmulateIE8”);
参考:http://ilia.ws/archives/196-IE8-X-UA-Compatible-Rant.html
第九种方案
这是因为 IE 兼容性设置中的设置表示所有 Intranet 站点都应以兼容模式运行。您可以通过组策略 (或者在 IE 中简单的解除它) 来取消选择,也可以设置以下内容:
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
显然,不可能将兼容性视图设置更改为组策略,但它可能在注册表中更改,这个元标记对我来说可以正常工作,我必须使所需的属性作为 html 表单的一部分,它的工作在 chrome 和 firefox 但不是 IE 。
以下是浏览器支持每个 html 5 元素的一个很好的视觉效果。
请注意 Google Chrome 的一个共同特征,它支持所有内容。希望这是有帮助的
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。