使用标签强制IE兼容模式关闭


375

我正在为在所有Intranet站点上强制兼容模式的客户端做工作。我想知道是否可以在HTML中放入一个标记,以强制关闭兼容模式。


我认为你正在寻找的答案就在这里:stackoverflow.com/questions/1014666/...
加布里埃尔

45
实际上,我在寻找完全相反的东西,他们将他们的标准设置为兼容模式,那简直太疯狂了。
Al Katawazi 2010年

12
遗留应用程序上的javascript错误,导致IE7以外的其他应用崩溃,这是将其标准设置为兼容的原因。有一天,我们会四处替换...
皮特·异教徒-沙鼠

1
@ petethepagan-gerbil你能代替它吗?:P
icedwater

1
@icedwater我6年前离开公司:)每当我们在同一地区进行更改时,我们进行了一些小的改进,以消除问题,但是技术债务从未在那儿得到优先考虑。不知道最后是否能解决。
皮特异教徒-沙鼠

Answers:


535

有“边缘”模式

<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页面:

边缘模式告诉Windows Internet Explorer以可用的最高模式显示内容,这实际上打破了“锁定”范式。使用Internet Explorer 8,这等效于IE8模式。如果将来(假设)的Internet Explorer版本支持更高的兼容模式,则设置为“边缘”模式的页面将以该版本支持的最高模式显示;否则,该页面将显示为“兼容”模式。但是,使用Internet Explorer 8查看时,这些页面仍将以IE8模式显示。

但是,在生产使用中不鼓励使用“边缘”模式:

建议Web开发人员限制使用Edge模式来测试页面和其他非生产用途,因为在将来版本的Windows Internet Explorer中呈现页面内容可能会产生意外结果。

老实说,我并不完全理解为什么。但是据此,目前最好的方法是使用IE=8


7
截至IE=102012年8月6日,Microsoft似乎正在自己的网站上使用。如果您已经在IE10(预览版)中测试过您的网站,则可以安全地使用它;否则,您可能要暂时坚持IE=9
calvinf 2012年

75
我发现如果用户(或sysadmin)已通过转到Tools->Compatibility View Settings并选中“在兼容性视图中显示所有网站” 作为默认设置打开了兼容性模式,则此方法将不起作用。要解决该问题,我必须在HTTP响应中返回标头:X-UA-Compatible: IE=edge
speedplane

10
+1到Speedplane-Intranet站点默认IE10兼容模式为ON-UGH ...感谢您的搜索!
viperguynaz

132
为那些找到此答案但无法为他们工作的人提供建议的单词。兼容性元标记必须是第一个元标记,并且在该标记之前不能有IE条件语句。更多:tesmond.blogspot.com/2011/10/…–
克里斯·

2
谢谢克里斯!当我终于读完您的评论时,我为此苦了30分钟。我先没有
Hawkee 2013年

91

经过数小时的故障排除工作之后,...以下是一些快速的重点帮助我们从X-UA-Compatible文档中受益: http //msdn.microsoft.com/zh-cn/library/cc288325( .aspx#ctl00_contentContainer_ctl16

使用 <meta http-equiv="X-UA-Compatible" content=" _______ " />

  • 标准的用户代理模式(非模拟的)忽略<!DOCTYPE>在页面指令和渲染基于该版本的IE浏览器所支持的标准(例如,IE=8将更好地服从表格边框间距和一些伪选择比IE=7)。

  • 而“ 仿真”模式告诉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"


67

如果您正在使用Intranet区域中的页面,则无论您做什么,都可能会发现IE9正在进入IE7兼容模式。

这是由于IE兼容性设置中的设置所致,该设置指出所有Intranet站点都应在兼容模式下运行。您可以通过组策略取消选中该复选框(或在IE中将其取消选中),也可以设置以下内容:

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

这可以正常工作(在其他答案中有详细说明),但最初可能不会出现:它需要在声明样式表之前出现。如果不这样做,它将被忽略。


3
感谢有关样式表的警告,这正在引起问题,我现在知道原因!
eMRe

是的,最初是通过放置抢劫的。感谢您添加。
John Moylan

谢谢,这非常有帮助。他们有一个GPO,即使安装了IE 11,它也会将有效IE级别设置为7。这使我不必在站点中放置一些垫片即可使js工作。
查尔斯·欧文


28

如对相关问题的答案所示,可以在Web.Config文件中设置“边缘”模式。这将使其适用于从应用程序返回的所有HTML,而无需将其插入到各个页面中:

<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="X-UA-Compatible" value="IE=edge" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

通过使用IIS管理器针对IIS服务器,整个网站或特定应用程序修改“ HTTP响应标头”,也可以完成同一步骤。


19

元标记解决方案不适用于我们,但在响应标头中进行设置可以:

header('X-UA-Compatible: IE=edge,chrome=1');

3
为“ chrome = 1” +1;我从来不知道。就其价值而言,将其更改为IE = 10可以解决我的网站上许多IE = edge都没有影响的渲染问题。

有关chrome=1属性的说明stackoverflow.com/a/22059516/368691。切记Chrome框架已淘汰。blog.chromium.org/2013/06/retiring-chrome-frame.html
Gajus 2015年

1
查看其他答案的评论...我发现如果用户(或sysadmin)已默认打开兼容模式,则无法使用,方法是转到“工具”->“兼容性视图设置”,然后选中“在兼容性视图中显示所有网站” 。speedplane '13 Apr 19'在11:29 7兼容性元标记必须是第一个元标记,并且在该标记之前不能有IE条件语句。更多:tesmond.blogspot.com/2011/10/…–克里斯·索博洛夫斯基(Chris Sobolewski)'13年8月19日在20:23
felickz

我试图将其放在布局页面的第一行。它不起作用,Stu提到了更改IIS HTTP响应标头。我试过了。我重新启动了应用程序池。我检查更多。这是页面嵌套在其他页面下。另一个页面确实有另一个meta。这是生产网站。如此多的人正在访问此页面。将此标签放在最上面是不可能完成的任务。任何其他解决方案,或者我搞砸了
user12345 '18

10

根据我最近的经验,仅在此主题上添加了一些注释。我所工作的大学为所有Intranet站点的IE 8笔记本电脑设置了兼容模式。我尝试添加meta标记来禁用此模式,以防止我的网站正在投放的页面,但是IE始终忽略此标记。正如Lance在他的帖子中提到的,添加响应标头可以解决此问题。这是我基于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>

.htaccess方法在IE8 +中对我有用,它删除了兼容性按钮(又名1号敌人),并强制IE8避免使用兼容模式。相关:元标记替代方案似乎只能在某些条件下(IE Voodoo)在各种计算机上工作。
威廉·伊斯特

10

IE8的inerERnet默认为标准模式,而intRAnet的默认模式为quirks。如果您将doctype设置为xhtml transitional,则将忽略HTML meta标记。解决方案是在代码中添加HTTP标头。这为我们工作。现在,我们的Intranet网站正在强制IE8以标准模式呈现应用。

添加到基本页面类(ASP.net C#)的PageInit中:

Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");

参考:http : //ilia.ws/archives/196-IE8-X-UA-Compatible-Rant.html


3

这是由于IE兼容性设置中的设置所致,该设置指出所有Intranet站点都应在兼容模式下运行。您可以通过组策略取消选中该复选框(或在IE中将其取消选中),也可以设置以下内容:

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

显然,不可能将兼容性视图设置作为组策略进行更改,但是可以在注册表中进行更改,此meta标记对我来说很好,我必须使必需的属性作为html表单的一部分工作,它只能在chrome和firefox中使用,但不能在IE中使用。

这是浏览器支持每个单独的html 5元素的直观视图。

http://html5readiness.com/

请注意,Google Chrome是一个共同点,它支持所有功能。希望这会有所帮助


看起来Firefox和IE 10现在也支持所有功能。Chart并没有像Chrome那样清晰明了。
Tony L.

0

作为标签的第一项插入。

这将迫使IE在IE的物理版本中呈现页面,并且它会忽略浏览器的“模式设置”。可以在开发人员工具中进行设置,尝试将其更改为较旧版本的IE进行测试,应将其忽略,页面外观应完全相同。


0

如果您有权访问服务器,则最可靠的方法是在IIS中的服务器本身上进行访问。进入IIS HTTP响应标头。添加名称:与X-UA兼容的
值:IE = edge这将覆盖您的浏览器和您的代码。


如果在网站级别进行了设置,这将重置为IIS的新部署
Eman Pitts

0

如果您希望每个网页都加载选定的内容并正在使用asp.net。只需将其作为Views> shared> Layout.cshtml标题标签下的第一个标签应用即可

只是一个提示

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.