X-UA-Compatible设置为IE = edge,但它仍然不会停止兼容模式

Ker*_*ick 246 internet-explorer ie8-compatibility-mode x-ua-compatible

我很困惑.我应该可以设置

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Run Code Online (Sandbox Code Playgroud)

IE8和IE9应使用最新的渲染引擎呈现页面.但是,我刚刚对它进行了测试,如果在我们网站的其他地方启用了兼容模式,它将保留在我们的页面上,即使我们应该强制它不要.

怎么是你应该确保IE浏览器没有(甚至在企业内部网)使用兼容模式?

FWIW,我正在使用HTML5 DocType声明(<!doctype html>).

以下是该页面的前几行:

<!doctype html> 
<!--[if lt IE 7 ]> <html lang="en" class="innerpage no-js ie6"> <![endif]--> 
<!--[if IE 7 ]>    <html lang="en" class="innerpage no-js ie7"> <![endif]--> 
<!--[if IE 8 ]>    <html lang="en" class="innerpage no-js ie8"> <![endif]--> 
<!--[if (gte IE 9)|!(IE)]><!--> 
<html lang="en" class="innerpage no-js"> 
<!--<![endif]--> 
    <head> 
        <meta charset="ISO-8859-1" /> 
        <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
Run Code Online (Sandbox Code Playgroud)

编辑:我刚刚了解到 IE8的默认设置是对Intranet站点使用IE7兼容模式.这会覆盖X-UA兼容的元标记吗?

Tim*_*lin 260

如果您需要覆盖IE的Intranet站点的兼容性视图设置,您可以在web.config(IIS7)中或通过网站属性(IIS6)中的自定义HTTP标头执行此操作,并在那里设置X-UA兼容.元标记不会覆盖兼容性视图设置中IE的Intranet设置,但如果您在托管服务器上设置它,它将覆盖兼容性.

IIS7中web.config的示例:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-UA-Compatible" value="IE=EmulateIE8" />
      </customHeaders>
    </httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

编辑:我clear从之前删除了代码add; 这是对复制和粘贴的不必要的疏忽.好评,评论者!

  • PHP:`<?php header('X-UA-Compatible:IE = edge'); ?>` (14认同)
  • 只是注意......如果您正在使用内置的Visual Studio开发Web服务器(也称为Cassini)进行开发,那么这将无法工作,因为Cassini不遵守Web的<system.webServer>部分.配置.因此,对于开发,请改用IIS Express. (5认同)

neo*_*swf 182

服务器端解决方案是推荐的,正如@TimmyFranks在他的回答中提出的那样,但是如果需要X-UA-Compatible在页面级别实现规则,请阅读以下提示,以便从已经被烧毁的人的经验中受益


X-UA-Compatiblemeta标签必须在标题后直接出现<head>的元素.没有其他元标记,css链接和js脚本调用可以放在它之前.

<head>
    <title>Site Title</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta charset="utf-8">
    <script type="text/javascript" src="/jsFile.js"></script>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
    <link rel="shortcut icon" href="/apple-touch-icon.png" />
</head>
Run Code Online (Sandbox Code Playgroud)

如果页面中有任何条件注释(假设位于其中<html>),则必须将它们放在...之后<head>.

// DON'T: place class inside the HTML tag 
<!--[if gt IE 8]><!--> 
    <html class="aboveIe8"> 
<!--<![endif]-->

// DO: place the class inside the BODY tag
<!--[if gt IE 8]><!--> 
    <body class="aboveIe8"> 
<!--<![endif]-->
Run Code Online (Sandbox Code Playgroud)

Html5BoilerPlate的团队写了这个错误 - http://h5bp.com/i/378 他们有几个解决方案.

关于Intranet和兼容性视图,当您转到工具>兼容性视图设置时,会有设置.

兼容性视图设置

  • `X-UA-Compatible`应该尽早出现,[可能在`charset`之后](https://github.com/h5bp/html5-boilerplate/blob/master/index.html).我不认为它"必须在标题之后直接出现". (6认同)
  • 哇,这对我有用,并且在标题标签之后立即使用我的元标记.希望这项工作不那么古老...... (4认同)

tj1*_*111 38

请注意,如果您使用PHP提供服务,则可以使用以下代码进行修复.

header("X-UA-Compatible: IE=Edge");
Run Code Online (Sandbox Code Playgroud)

  • 这比添加元标记更好,因为它使用此方法传递W3C验证,并且比.htaccess黑客更容易. (4认同)
  • 我尝试了其他一切,这才是最终奏效的.谢谢. (2认同)
  • 对于WordPress上的用户,这可能有所帮助:http://codex.wordpress.org/Plugin_API/Action_Reference/send_headers (2认同)
  • @sunskin - PHP发送的任何标题*必须*在将任何输出发送到页面之前发生,即在PHP输出任何HTML或数据之前. (2认同)

Ker*_*ick 25

事实证明,这与微软的"智能"选择有关,即使X-UA-Compatible设置为所有内网站点强制进入兼容模式IE=edge.

  • 这不是真的.X-UA-Compatible将覆盖兼容模式设置.但是,有时使用元标记不起作用,因为模式已经在遇到它时设置.这就是我使用HTML标头版本的原因,因此浏览器可以在此过程的早期启用标准模式. (32认同)
  • 我已多次尝试此操作并且它不会覆盖强制进行可比性模式的所有Intranet站点. (7认同)
  • 添加到Mystere Man的注释,您可以使用web.config或IIS中的自定义http标头从托管服务器覆盖它.请参阅上面的帖子了解详情. (3认同)

小智 9

我也在本地主机的IE7文档标准中得到了同样的IE9渲染问题.我尝试了很多条件评论标签,但不成功.最后,我刚刚删除了所有条件标签,并在下面的头部之后立即添加了元标记,它就像魅力一样.

<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你


rsh*_*man 7

即使您取消选中"在兼容性视图中显示Intranet站点"选项,并在响应标头中具有X-UA-Compatible,还有另一个原因可能导致您的浏览器默认为"兼容性视图" - 您的组策略.查看您的控制台以获取以下消息:

HTML1203:xxx.xxx已配置为通过组策略在兼容性视图中运行.

其中xxx.xxx是您网站的域名(即test.com).如果您看到这个,那么您的域的组策略已设置,以便任何以test.com结尾的站点将自动呈现为兼容模式,而不管doctype,header等.

有关详细信息,请参阅以下链接(解释html代码):http://msdn.microsoft.com/en-us/library/ie/hh180764(v = vs.85).aspx


use*_*892 5

正如NEOSWF指出的那样,保罗爱尔兰条件评论会阻止元标记产生任何影响.

这里有几个修复程序(http://nicolasgallagher.com/better-conditional-classnames-for-hack-free-css/)

这些包括:

添加两个HTML类,使用服务器标头并在doctype之上添加条件注释.

在我的最新项目中,我决定删除保罗爱尔兰条件评论.我不喜欢在html之前添加任何内容而不先进行大量测试的想法,并且通过查看HTML来查看已设置的内容很高兴.

最后,我在身体后面直接包围了一个div,并使用了条件评论,例如

  <!--[if IE 7]><div class="ie7"><!--<![endif]-->
  ... regular body stuff
  <!--[if IE 7]></div><!--<![endif]-->
Run Code Online (Sandbox Code Playgroud)

我可以在身体周围做到这一点,但对于像Wordpress这样的CMS来说更难.

显然它是标记内的另一个DIV,但它仅适用于较旧的浏览器.

我认为这可能是基于每个项目的决定.

我还读过一些关于需要在前1024字节中出现的charset元标记的内容,以确保这一点.

有时最简单,最容易阅读的想法是最好的,它绝对值得思考!感谢上面链接上的第6条评论,指出了这一点.


小智 5

X-UA-Compatible只会覆盖文档模式,而不是浏览器模式,并且不适用于所有Intranet站点; 如果是这种情况,最佳解决方案是禁用"在兼容性视图中显示Intranet站点"并设置组策略设置以指定哪些Intranet站点需要兼容模式.


Met*_*zed 5

我将以下内容添加到我的htaccess文件中,该文件可以解决问题:

BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
Run Code Online (Sandbox Code Playgroud)