检测IE8兼容模式

don*_*ger 27 backwards-compatibility internet-explorer-8 ie8-compatibility-mode

可能重复:
在IE7兼容模式下区分IE7浏览器和浏览器

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

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

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

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

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

Lac*_*che 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
Mozilla/4.0 上的IE7 (兼容; 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
Mozilla/4.0 上的IE8 (兼容; MSIE 8.0 ; Windows NT 6.0; Trident/4.0)

  • 重申这是正确的答案:没有Trident它是IE7,Trident它是IE8(或更高版本). (4认同)

小智 12

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

  • 在兼容性视图下,IE7和IE8的用户代理字符串不完全相同,字符串中还有一个额外的"Trident 4.0"令牌.请看:http://blogs.msdn.com/ie/archive/2009/01/09/the-internet-explorer-8-user-agent-string-updated-edition.aspx (4认同)

小智 5

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

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

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


Rob*_*Rob 1

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

如果您有权访问服务器本身,则可以发送 HTTP 标头,请查看Mike Ormond 的博客用于在 IIS 上实现元交换机的MSDN 页面包含标头以及如何设置/发送标头的详细信息。