首页 文章

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

提问于
浏览
243

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

<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兼容的元标记吗?

18 回答

  • 0

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

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

    强制浏览器不使用兼容性视图的唯一方法是让用户在浏览器中禁用它 . 我们是一个Intranet站点,默认的IE选项是使用Intranet站点的兼容性视图 . 太痛苦了!

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

  • 38

    如果您需要覆盖IE的Intranet站点的兼容性视图设置,您可以在web.config(IIS7)中或通过网站's properties (IIS6) and set X-UA-Compatible there. The meta tag doesn'中的custom HTTP headers覆盖兼容性视图设置中IE的Intranet设置,但是如果您将其设置为托管服务器它将覆盖兼容性 .

    IIS7中web.config的示例:

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

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

  • 179

    我能够绕过这个加载带有PHP的HTML之前的 Headers ,并且它工作得非常好 .

    <?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是我想在发送 Headers 后加载的内容 .

  • 24

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


    X-UA-Compatible 元标记 must 直接出现在 <head> 元素中的 Headers 之后 . 没有其他元标记,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>
    

    如果页面中有任何 conditional comments (假设位于 <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和兼容性视图,当您转到工具>兼容性视图设置时,会有设置 .

    Compatibility view settings

  • 1

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

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

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

  • 0

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

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

    希望能帮助到你

  • 5

    即使您取消选中“在兼容性视图中显示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

  • 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]-->
    

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

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

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

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

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

  • 6

    X-UA-Compatible 将仅覆盖文档模式,而不是浏览器模式,并且不适用于所有Intranet站点;如果是这种情况,最好的解决方案是禁用"Display intranet sites in Compatibility View"和set a group policy setting以指定哪些Intranet站点需要兼容模式 .

  • 0

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

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

    此外,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开始处理之前设置渲染引擎

    • 文件然后我们设置用于所有浏览器的编码

    • 然后我们打印 Headers ,将使用已定义的编码处理 .

  • 1

    对于Nginx,

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

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

  • 5

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

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

    尝试了很多组合之后我遇到了同样的问题我有这个工作说明我已经检查了内部网的兼容性

    <!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">
    
  • 2

    如果您正在使用LAMP堆栈,请将其添加到Web根文件夹中的.htaccess文件中 . 无需将其添加到每个PHP文件中 .

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

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

    从以下注册表项删除 CurrentVersion 后,我能够将配置文件更改为 Desktop

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

    将模式更改为 Desktop 后,此帖子上的答案将起作用 .

  • 3

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

    在使用域和子域连接服务器端时,这也发生在我身上 . 对于所有子域,机器被限制为在兼容模式下打开 .

    DISABLE COMPABILITY MODE FOR INTRANET

    HKEY_LOCAL_MACHINE - SOFTWARE - Policies - Microsoft - Internet Explorer - BrowserEmulation -> IntranetCompalityMode 值应为 0 (zero) . 并且还从PolicyList中删除现有域名 .

    否则,您可以添加包含 0 (zero) 值数据的新值(DWORD) .

相关问题