问题描述

我正在为在所有内部网站上强制兼容性模式的客户端工作。我想知道是否有一个标签,我可以放入我的 HTML,强制兼容模式关闭。

最佳解决方案

There is the “edge” mode

<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 元素的一个很好的视觉效果。

http://html5readiness.com/

请注意 Google Chrome 的一个共同特征,它支持所有内容。希望这是有帮助的

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛