X-UA-Compatible 元标记和浏览器重定向的问题

Posted

技术标签:

【中文标题】X-UA-Compatible 元标记和浏览器重定向的问题【英文标题】:Problems with X-UA-Compatible meta tag and browser redirect 【发布时间】:2013-12-30 13:33:57 【问题描述】:

我目前正在开发一个新的 Web 项目,但在针对 Internet Explorer 优化它时遇到了一些问题(呵呵,谁会想到呢?)... 我想支持 IE8+ 但将 IE 7 及更早版本重定向到另一个页面,建议下载另一个浏览器。对于 IE8,我想显示一条消息,推荐另一个浏览器,但不重定向它。在 IE 9+ 中一切正常。 我遇到的第一个问题是,IE10 总是以兼容模式呈现页面,使用 IE7 标准并使页面看起来很糟糕。所以我介绍了这样的 X-UA-Compatible 元标记:

<meta http-equiv="X-UA-Compatible" content="IE=10,IE=9,IE=8" />

然后我尝试使用 IE7 及以下实现重定向

<!--[if lte IE 7]> 
        <script type="text/javascript"> 
            document.location.href = "outdated.html"; 
        </script> 
<![endif]-->

使用 F12 在不同模式下在 IE11 中测试页面不会进行重定向,并且在 IE7 及更低版本中显示页面很糟糕,因此我假设 X-UA-Compatible 元标记会破坏条件 cmets。尽管如此,如果没有标签,所有低于 IE10 的 IE 版本都会被重定向,即使条件 cmets 显示“lte IE 7”...

我自己似乎无法解决这个问题,因此我们将不胜感激! :)

干杯,罗伯

【问题讨论】:

【参考方案1】:

如果网站是从 localhost 或 Intranet 提供的,IE 默认使用兼容模式。

您可以阅读更多关于它的信息here

在企业环境中,某些领域的风险较低 兼容性问题。例如,Intranet Zone 网站使用 默认的兼容性视图。

你不能像你一样使用元标记来覆盖它。

您需要发送 HTTP Header:

X-UA-Compatible: IE=edge

回答了类似的问题here

如果您使用的是 .NET,则可以使用 IIS 配置添加此标头或在 web.config 文件中进行更改:

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

【讨论】:

嗨,Kaspars,感谢您的回复!确实离线测试是自动使用兼容模式的原因,没有意识到这一点。由于它将是一个托管网站,我想我根本不需要覆盖它,是吗?尽管如此,有条件的 cmets 似乎不起作用......有什么想法吗?干杯,罗伯 您好,我刚刚读到 IE11 完全放弃了对条件 cmets 的支持,您必须拥有要测试的浏览器的实际副本……这是真的吗?因为我认为他们上周在我的 Windows 虚拟机上仍然有 IE10 时工作...... 如果您在 Internet 上的某个地方托管您的网站,您应该可以不用做任何事情。同时,如果您在 localhost 或 Intranet 上为客户做一些演示,请务必小心。我一直在那里解释为什么每次我重新加载页面时网站看起来都坏了。 :) 所有你关心的是 IE7 理解那些标签。 IE11 是否放弃了对这些标签的支持并不重要,因为在 IE11 上您不需要进行任何重定向或显示消息。如果对于新的浏览器版本,条件 cmets 被删除,那么浏览器必须将块视为注释,它本质上是什么。检查它的最佳方法是使用一些在线兼容性工具,例如browsershots.org

以上是关于X-UA-Compatible 元标记和浏览器重定向的问题的主要内容,如果未能解决你的问题,请参考以下文章

浏览器302重定向传递hash

X-UA-Compatibles

如何在 JavaScript 中添加元标记

所有移动浏览器的完整网页和禁用缩放视口元标记

浏览器显示德语字符问题

桌面浏览器如何处理移动元标记?