检测IE8兼容模式

时间:2009-08-25 15:17:35

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

  

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

我们没有时间用我们相当广泛的系统对IE8进行全面测试。我们也达到了不能禁止使用IE8的程度。我们的用户很顽固,而且不是非常复杂,所以我们不认为我们可以告诉他们使用“兼容模式”按钮。相反,我们将“IE = EmulateIE7”元标记添加为临时修复。

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

这意味着,除其他事项外,我们必须禁用检查,然后,如果我们在某处犯了一个错误并忘记将元标记添加到页面,我们将会破坏页面。

有没有其他人遇到过这种情况并想出更好的方法?当元标记设置模式时,是否无法检测IE8是否在兼容模式下运行?

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

5 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:12)

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

答案 2 :(得分:5)

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

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

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

答案 3 :(得分:2)

当您处理从IE8模拟黑名单网站(如Facebook)进入您网站的链接时,问题实际上更加复杂。

Facebook上的共享链接会导致您的链接在弹出窗口中打开 - 如果在兼容性视图设置上选中“包含更新问题”,默认情况下会检查该选项,弹出窗口会从Facebook看到黑名单引荐来源并打开最初是黑名单模式的窗口。在后台检测Trident \ 4.0时 - 您将看到该值,并设置下层CSS。

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

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

就像Downlevel你设置IE = EmulateI7强制浏览器关闭你可以添加IE = EmulateIE8并强制用户在IE8 Standard中查看你的页面。此模式甚至无法选择兼容性视图并降低该模式的测试需求

答案 4 :(得分:1)

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

如果您可以访问服务器本身,则可以发送HTTP标头,查看Mike Ormond's blog about itImplementing the Meta Switch on IIS的MSDN页面包含标题的详细信息以及如何设置/发送它。