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

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

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

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

编辑:我才知道, IE8上的默认设置是对内网站点使用IE7兼容模式。这会覆盖x - ua compatible元标记吗?

385163 次浏览

事实证明,这与微软的“聪明”选择有关,以使所有内部网站点强制进入兼容模式,即使X-UA-Compatible被设置为IE=edge

如果你需要覆盖IE的内部网站点的兼容性视图设置,你可以在web上这样做。config (IIS7)或通过网站属性(IIS6)中的自定义HTTP报头,并在那里设置X-UA-Compatible。元标签不会在兼容性视图设置中覆盖IE的内部网设置,但如果你在主机服务器上设置它,它会覆盖兼容性。

web示例。IIS7中的配置:

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

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

服务器端解决方案是推荐的,正如@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的团队写了关于这个错误- http://h5bp.com/i/378

关于Intranet &兼容性视图,在工具>中有设置;兼容性视图设置。

兼容性视图设置

蒂米·弗兰克斯很适合我。我们今天遇到了一个问题,客户在公司范围内使用IE8,这迫使我们为他们的内部网编写的网站进入兼容模式。设置“IE-Edge”似乎可以解决这个问题。

<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=Edge" />
</customHeaders>
</httpProtocol>

注意,如果从PHP提供服务,也可以使用下面的代码来修复它。

header("X-UA-Compatible: IE=Edge");

正如NEOSWF上面指出的,Paul Irish条件注释阻止了元标记的任何影响。

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

这些包括:

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

在我最新的项目中,我决定删除Paul Irish条件注释。我不喜欢在html之前添加任何东西而不做大量的测试,只通过查看html就能看到已经设置了什么,这很好。

最后,我在正文后面直接包围了一个div,并使用了条件注释

  <!--[if IE 7]><div class="ie7"><!--<![endif]-->
... regular body stuff
<!--[if IE 7]></div><!--<![endif]-->

我可以在身体周围这样做,但它更困难的cms,如Wordpress。

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

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

我还读了一些关于字符集元标签需要在前1024字节,所以这确保了。

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

我也有同样的问题,在尝试了很多组合后,我有这个工作 注意,我已经检查了intranet

的兼容性
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<head runat="server">

如果你正在使用LAMP堆栈,那么将其添加到web根文件夹中的.htaccess文件中。不需要将它添加到每个PHP文件中。

<IfModule mod_headers.c>
Header add X-UA-Compatible "IE=Edge"
</IfModule>

即使你没有勾选“在兼容性视图中显示intranet站点”选项,并且在你的响应头中有X-UA-Compatible,还有另一个原因为什么你的浏览器可能默认为“兼容性视图”——你的组策略。查看控制台,查看以下消息:

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

xxx。XXX是您网站(即test.com)的域名。如果您看到此情况,则您域的组策略已设置,以便任何以test.com结尾的站点将自动以兼容模式呈现,而不管文档类型、标题等。

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

我在本地主机的IE7文档标准中也得到了相同的IE9渲染问题。 我尝试了许多条件注释标签,但不成功。 最后,我只是删除了所有的条件标签,只是在头部之后立即添加了元标签,就像下面这样,它就像魅力一样
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

希望能有所帮助

X-UA-Compatible将只覆盖文档模式,而不是浏览器模式,并且将不适用于所有内部网站点;如果这是你的情况,最好的解决方案是禁用“在兼容性视图中显示intranet站点”和设置组策略设置来指定哪些intranet站点需要兼容性模式。

我添加了以下到我的htaccess文件,它做到了戏法:

BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie

IE 11不再允许你通过发送头文件来覆盖浏览器兼容性视图设置…

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

强制浏览器不使用兼容性视图的唯一方法似乎是让用户在浏览器中禁用它。我们的网站是内网网站,IE默认选项是为内网网站使用兼容性视图。真痛苦!

我们能够防止用户更改IE 9和10的浏览器设置,但它不再适用于IE 11。我们的IE用户正在切换到Chrome,这不是问题,从来都不是问题。

此外,X-UA-Compatible必须是头部部分的第一个元标记

<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
</head>

顺便说一下,正确的顺序或主要的头部标签是:

<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta charset="utf-8">
<title>Site Title</title>
<!-- other tags -->
</head>

这种方式

  1. 我们将渲染引擎设置为在IExplorer开始处理之前使用
  2. 然后我们将文档设置为所有浏览器使用的编码
  3. 然后打印标题,它将使用已经定义的编码进行处理。

我能够绕过这个加载头之前的HTML与php,它工作得很好。

<?php
header( 'X-UA-Compatible: IE=edge,chrome=1' );
header( 'content: width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' );
include('ix.html');
?>

ix.html是我在发送报头后想要加载的内容。

Nginx,

add_header "X-UA-Compatible" "IE=Edge,chrome=1";

ref: https://github.com/h5bp/server-configs/commit/a5b0a8f736d68f7de27cdcb202e32975a74bd2c5

我在IE11中遇到了同样的问题。这些答案都没有解决我的问题。在挖掘了一些之后,我注意到浏览器运行在企业模式下。(通过点击F12并单击仿真选项卡进行验证,寻找浏览器配置文件下拉菜单)设置被锁定,不允许我更改设置。

在从以下注册表项中删除CurrentVersion后,我能够将配置文件更改为桌面:

HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main\EnterpriseMode

在将模式更改为桌面后,这篇文章上的答案将工作。

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

这也发生在我使用域和子域连接服务器端。机器被限制在兼容模式下为所有子域打开。

禁用内网兼容模式

HKEY_LOCAL_MACHINE - SOFTWARE - Policies - Microsoft - Internet Explorer - BrowserEmulation -> IntranetCompalityMode Value应该是0(零)。并从策略列表中删除现有域名。

否则,您可以添加一个包含0(零)值数据的新值(DWORD)。