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

问题描述 投票:246回答:18

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

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

并且IE8和IE9应该使用最新的呈现引擎来呈现页面。但是,我刚刚对其进行了测试,并且如果在我们网站的其他位置打开了兼容模式,则即使our page处于强制状态,它也将保持打开状态。

您应该如何确保IE not使用兼容模式(即使在Intranet中也是如此?

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" /> 

编辑:I just learned IE8的默认设置是对Intranet站点使用IE7兼容模式。这会覆盖X-UA-Compatible元标记吗?

internet-explorer ie8-compatibility-mode x-ua-compatible
18个回答
261
投票

如果需要覆盖Intranet网站的IE兼容性视图设置,则可以在web.config(IIS7)中或通过网站属性(IIS6)中的custom HTTP headers进行覆盖,并在其中设置X-UA-Compatible。 meta标记不会覆盖“兼容性视图设置”中IE的Intranet设置,但是如果在托管服务器上进行设置,它将覆盖兼容性。

IIS7中web.config的示例:

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

Edit:我从clear之前删除了add代码;这是复制和粘贴过程中不必要的监督。好收获,评论员!


3
投票

此外,X-UA兼容必须是头部中的第一个meta标签


2
投票

蒂米·弗兰克斯(Timmy Franks)适合我。今天,我们刚遇到一个问题,即客户端在公司范围内拥有IE8,这迫使我们为其Intranet编写的网站进入兼容模式。设置“ IE-Edge”似乎可以解决。


2
投票

对于Nginx,


1
投票

IE 11不允许您再通过发送标头来覆盖浏览器兼容性视图设置...


1
投票

我能够解决这个问题,在使用PHP的HTML之前加载标头,并且效果很好。


1
投票

我在IE11中遇到了相同的问题。这些答案都不能解决我的问题。经过一番挖掘,我发现浏览器以Enterprise


1
投票

当您的浏览器以兼容模式打开时,即使您从Web浏览器和本地组策略编辑器中删除并关闭了所有兼容模式配置,也可以尝试从注册码中禁用。


0
投票

在尝试了多种组合后,我遇到了同样的问题注意我已经检查了Intranet的兼容性


0
投票

[如果使用的是LAMP堆栈,则将其添加到Web根文件夹中的.htaccess文件中。无需将其添加到每个PHP文件中。


183
投票

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


X-UA-Compatible元标记必须出现在<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>

如果页面中有任何条件注释(假设位于<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]-->

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

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

“兼容性视图设置”“>


38
投票

请注意,如果您是通过PHP提供的,则也可以使用以下代码对其进行修复。


25
投票

事实证明,这与Microsoft's "intelligent" choice有关,即使X-UA-Compatible设置为IE=edge,也要使所有Intranet站点强制进入兼容模式。


9
投票

我在本地主机的IE7文档标准中也遇到了相同的IE9渲染问题。我尝试了许多条件注释标签,但未成功。最后,我只是删除了所有条件标签,并在如下所示的头部之后立即添加了meta标签,它的工作方式就像是魅力。


7
投票

即使您未选中“在兼容性视图中显示Intranet网站”选项,并且响应标题中具有X-UA-Compatible,您的浏览器仍然可能默认为“兼容性视图”的另一个原因-您的组策略。在控制台上查看以下消息:


5
投票

正如NEOSWF在上面指出的那样,Paul Irish条件注释使meta标签停止起作用。


5
投票

X-UA-Compatible将仅覆盖文档模式,而不覆盖浏览器模式,并且不适用于所有Intranet站点;如果是这种情况,最好的解决方案是禁用“在兼容性视图中显示Intranet站点”和set a group policy setting以指定哪些Intranet站点需要兼容模式。


5
投票

我将以下内容添加到我的htaccess文件中,该文件可以完成窍门:

© www.soinside.com 2019 - 2024. All rights reserved.