X-UA兼容设置为IE =边缘,但仍不会停止兼容模式
我很困惑。 我应该可以设置
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
而IE8和IE9应该使用最新的渲染引擎来渲染页面。 但是,我只是testing了一下,如果兼容模式在我们网站上的其他地方打开,即使我们不应该强制它,它仍然会保留在我们的页面上。
你应该如何确保IE不使用兼容模式(即使在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" />
编辑: 我刚刚了解到 ,IE8的默认设置是使用IE7兼容模式的Intranet网站。 这会覆盖X-UA兼容元标记吗?
如果您需要覆盖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>
编辑 :我删除了add
前的clear
代码; 这是从复制和粘贴的不必要的监督。 好的,评论者!
服务器端解决scheme是推荐的解决scheme,正如@TimmyFranks在他的回答中提出的那样,但是如果需要在页面级别上实施X-UA-Compatible
规则,请阅读以下提示,以便从已经获得被烧了:-)
X-UA-Compatible meta tag
必须在<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>
。
NO //dont place class inside the HTML tag <!--[if gt IE 8]><!--> <html class="aboveIe8"> <!--<![endif]--> YES //DO place the class inside the BODY tag <!--[if gt IE 8]><!--> <body class="aboveIe8"> <!--<![endif]-->
编辑: Html5BoilerPlate的团队写了关于这个错误 – http://h5bp.com/i/378他们有几个解决scheme。;
关于Intranet和兼容性视图,当您进入工具>兼容性视图设置时,会有设置。
请注意,如果您是从PHP提供的,则可以使用以下代码来修复它。
header("X-UA-Compatible: IE=Edge");
事实certificate,即使X-UA-Compatible
设置为IE=edge
,这也与微软的“智能”select有关,以使所有内部网站强制进入兼容模式。
本地主机的IE7文档标准中也出现了IE9渲染的相同问题。 我尝试了很多有条件的评论标签,但没有成功。 最后,我只是删除所有的条件标签,只是像下面的头后立即添加元标记,它的工作就像魅力。
<head> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
希望它有帮助
即使您没有选中“在兼容性视图中显示Intranet站点”选项,并且在响应头中包含X-UA兼容,您的浏览器可能会默认为“兼容性视图”,这也是您的组策略的另一个原因。 查看您的控制台以获取以下消息:
HTML1203:xxx.xxx已被configuration为通过组策略在兼容性视图中运行。
其中xxx.xxx是您网站的域名(即test.com)。 如果你看到这个,那么你的域的组策略是这样设置的,这样任何以test.com结尾的站点都将自动以兼容模式呈现,而不pipe文档types,头文件等。
有关更多信息,请参阅以下链接(解释html代码): http : //msdn.microsoft.com/en-us/library/ie/hh180764 (v=vs.85) .aspx
正如NEOSWF指出的那样,保罗·爱尔兰的有条件的评论终止了元标记的影响。
这里有几个修复程序( http://nicolas.java.com/better-conditional-classnames-for-hack-free-css/ )
这些包括:
添加两个HTML类,使用服务器标题并在doctype上添加条件注释。
在我最新的项目中,我决定删除保罗·爱尔兰的有条件的评论。 我不喜欢在HTML之前添加任何东西而不做任何testing的想法,很高兴通过查看HTML来看看已经设置了什么。
最后,我把身体包围起来,并使用条件注释,例如
<!--[if IE 7]><div class="ie7"><!--<![endif]--> ... regular body stuff <!--[if IE 7]></div><!--<![endif]-->
我本来可以在身体上做这个,但是对于像WordPress这样的CMS来说更难。
显然,它的另一个DIV内的标记,但它只适用于较旧的浏览器。
我认为这可能是一个基于项目的决定。
我也读了一些关于charset元标记需要进来的第一个1024字节,所以这确保了。
有时最简单,最容易阅读的想法是最好的,它绝对值得考虑! 感谢上面的链接的第六条评论指出这一点。
X-UA-Compatible
将只覆盖文档模式,而不是浏览器模式,并且不适用于所有内部网站; 如果是这种情况,最好的解决scheme是禁用“在兼容性视图中显示Intranet站点”,并设置组策略设置以指定哪些Intranet站点需要兼容模式。
我将下面的代码添加到了我的htaccess文件中,
BrowserMatch MSIE ie Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
此外,X-UA兼容必须是头部的第一个元标记
<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>
这条路
- 我们在IExplorer开始处理之前设置渲染引擎
- 然后我们将文档设置为所有浏览器使用的编码
- 那么我们打印标题,将用已定义的编码进行处理。
对于Nginx来说,
add_header "X-UA-Compatible" "IE=Edge,chrome=1";
ref: https : //github.com/h5bp/server-configs/commit/a5b0a8f736d68f7de27cdcb202e32975a74bd2c5
蒂米弗兰克斯适合我。 我们今天刚刚遇到了客户端在全公司范围内有IE8的问题,并且迫使我们为其Intranet编写的网站进入兼容模式。 设置“IE边缘”似乎修复它。
<httpProtocol> <customHeaders> <clear /> <add name="X-UA-Compatible" value="IE=Edge" /> </customHeaders> </httpProtocol>
我能够解决这个PHP的HTML之前加载头,它工作得很好。
<?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是我想在发送标题后加载的内容。
我尝试了很多组合后,也遇到了同样的问题。我有这个工作说明,我已经检查了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>
IE 11不允许您通过发送标头覆盖浏览器兼容性视图设置…
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
它似乎强制浏览器不使用兼容性视图的唯一方法是让用户在浏览器中禁用它。 我们是一个内联网站点,默认的IE选项是为内联网站点使用兼容性视图。 太痛苦了!
我们能够阻止用户改变他们的IE 9和10用户的浏览器设置,但它不再在IE 11中工作。我们的IE用户正在切换到Chrome,这不是一个问题,并且从来没有是。
我在IE11遇到同样的问题。 这些答案都没有解决我的问题。 挖了一下之后,我发现浏览器在Enterprise模式下运行。 (通过点击F12进行validation,然后单击仿真选项卡,查找浏览器configuration文件下拉菜单)设置被locking,不允许我更改设置。
从以下registry项中删除CurrentVersion后,我能够将configuration文件更改为“ 桌面” :
HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main\EnterpriseMode
将模式更改为“ 桌面 ”后,此post上的答案将起作用。
当您的浏览器以兼容模式打开时,即使您从Web浏览器和本地组策略编辑器中删除并closures所有兼容模式configuration,也可以尝试禁用registry项。
这也发生在我使用域和子域来连接服务器端。 机器被限制在所有子域以compability模式打开。
禁止内联的兼容性模式
HKEY_LOCAL_MACHINE – SOFTWARE – 策略 – Microsoft – Internet Explorer – BrowserEmulation – > IntranetCompalityMode值应为0(零) 。 并从PolicyList中删除现有的域名。
否则,可以添加包含0(零)值数据的新值(DWORD)。