【问题标题】:Detect IE8 Compatibility Mode [duplicate]检测 IE8 兼容模式 [重复]
【发布时间】:2010-11-22 16:08:39
【问题描述】:

可能重复:
Differentiate IE7 browser and browser in IE7 compatibility mode

我们还没有时间用我们相当广泛的系统全面测试 IE8。我们也达到了不能禁止使用 IE8 的地步。我们的用户很固执,也不是很老练,所以我们觉得我们不能告诉他们使用“兼容模式”按钮。相反,我们将添加“IE=EmulateIE7”元标记作为临时修复。

问题是,当使用这个标签时,浏览器仍然报告自己是IE8,然后被我们的页面检测到并拒绝。我可以理解为什么服务器端检测无法获取元标记(在发送和处理元标记之前,服务器已经拥有用户代理),但客户端检查也失败了。如果在客户端计算机上单击兼容模式按钮,则用户代理是 IE7,但如果我们使用元标记,则不是。

这意味着,除其他外,我们必须禁用检查,然后,如果我们在某处出错并忘记将元标记添加到页面,我们将有损坏的页面。

有没有其他人遇到过这种情况并提出了更好的方法?通过meta标签设置模式时,有没有办法检测到IE8是在兼容模式下运行的?

而且,我们确实知道有一个有效的思想流派,我们应该让所有页面与 IE8 标准模式兼容,但在我们现实的小角落里,这不是一个可行的选择(我会指出我们没有创建必须以非标准方式编写的 4 或 5 个版本的 IE)。

【问题讨论】:

标签: internet-explorer-8 backwards-compatibility ie8-compatibility-mode


【解决方案1】:

无论兼容模式如何,IE8 在 User-Agent 字符串中都包含一个三叉戟标记。

更多详情请参见 MSDN:http://blogs.msdn.com/ie/archive/2009/01/09/the-internet-explorer-8-user-agent-string-updated-edition.aspx

Windows Vista 上的 IE7
Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.0)

Windows Vista 上的 IE8(兼容性视图)
Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.0;Trident/4.0

Windows Vista 上的 IE8
Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.0;Trident/4.0

【讨论】:

  • 重申这是正确的答案:没有 Trident 是 IE7,Trident 是 IE8(或更高版本)。
【解决方案2】:

您需要检查 document.documentMode 的值,该值在真正的 IE8 模式下为 8,在 IE7 模式下为 7。用户代理字符串在这两种情况下都是相同的,并且仍然是 IE8。请注意,此 JavaScript 变量仅在 IE8 中可用。

【讨论】:

  • 兼容性视图下IE7和IE8的用户代理字符串不完全相同,字符串中有一个额外的'Trident 4.0'标记。见这里:blogs.msdn.com/ie/archive/2009/01/09/…
  • 这在 IE9 或 IE10 中不起作用?
【解决方案3】:

仅供参考,有关如何检测兼容模式(AKA 如何检测兼容性视图)的详细信息,请考虑查看以下链接...

http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx

...显示一些有用的信息。

【讨论】:

    【解决方案4】:

    当您处理从 IE8 仿真 BLACKLIST 网站(如 Facebook)进入您的网站的链接时,问题实际上更加复杂。

    Facebook 上的共享链接会导致您的链接在弹出窗口中打开 - 如果在默认情况下选中的兼容性视图设置中选中“包括更新网站列表”,则弹出窗口会看到来自 Facebook 的黑名单引荐来源并打开窗口最初处于黑名单模式。在后台检测 Trident\4.0 时 - 您将看到该值,并设置下级 CSS。

    但是,在浏览器加载后,它会退出 Compat 模式并切换到 STANDARD 模式而不刷新。因此,您为标准模式分配了错误的 CSS。

    解决方案 - 强制 IE 浏览器退出兼容模式。是的 - 看起来很奇怪,如果你不需要,为什么要让用户在你的网站上降级。

    就像设置 IE=EmulateI7 以强制关闭浏览器一样,您可以添加 IE=EmulateIE8 并强制用户在 IE8 标准中查看您的页面。这种模式甚至消除了他们选择兼容性视图并减少该模式的测试需求的能力

    【讨论】:

      【解决方案5】:

      不完全是“检测 IE8 兼容模式”,但它可能也有帮助:

      如果你可以访问服务器本身,你可以发送一个 HTTP Header,看看Mike Ormond's blog about itImplementing the Meta Switch on IIS 的 MSDN 页面详细介绍了标头以及如何设置/发送它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-25
        • 2011-03-15
        • 2014-07-02
        • 1970-01-01
        • 2011-04-08
        • 2011-01-31
        • 1970-01-01
        相关资源
        最近更新 更多