gpt4 book ai didi

JavaScript:如果 IE9 处于 IE7 或 IE8 兼容模式,我可以检测到它吗?

转载 作者:IT王子 更新时间:2023-10-29 02:45:13 24 4
gpt4 key购买 nike

我需要知道通过用户代理字符串将自己标识为 IE7 或 IE8 的浏览器是否真的是那些浏览器,或者它是否是 7 或 8 兼容模式下的 IE9。

从我在用户代理字符串中看到的,IE7 兼容模式下的 IE9 提供与真实 IE7 相同的字符串。是否有额外的属性/元素/对象,我可以测试它是否是“真正的”伪装的 IE9?

我假设文档模式无济于事,因为我的脚本加载到的页面可能会强制执行怪癖或强制执行特定设置。

我希望 IE9 将具有一些存在的属性并且可以测试,无论它是在 7、8 还是 9 模式下。


编辑添加…

好的,我现在明白我哪里出错了。我正在使用“浏览器模式”下拉菜单并将其切换到 IE8 和 IE7,并认为这分别是“IE8 兼容模式”和“IE7 兼容模式”。这当然不是真的。开发人员工具的浏览器模式确实将其切换为“像”那些旧浏览器,因此报告原始用户代理字符串是正确的。

如果我在 IE9 或 IE9 兼容性中保留浏览器模式并改为尝试文档模式下拉变体,那么我实际上会在所有 8 种组合(两种浏览器模式和 4 种文档模式)中出现“Trident/5.0”。我只需要避免选择浏览器模式 IE7 和 IE8,因为它们确实是(模拟的)IE7 和 IE8。

因此,页面、非开发人员用户、元标记或 Microsoft 的兼容性列表都不可能将 IE9 置于这种无法识别的状态。

只需使用 if(navigator.userAgent.indexOf("Trident/5")>-1) 就足够了。

别担心,这不适用于样式、格式、逻辑或页面内容。我对那些东西使用特征检测。我只需要检测 IE9(无论它处于何种模式)并据此做出非页面内容决定。

感谢您通过您的建议和链接引导我找到答案。

最佳答案

实际上,在 IE7 兼容模式下运行时,IE9 的用户代理字符串是不同的,因此这将是区分不同 IE 版本的最佳方法之一。

Introducing IE9’s User Agent String :

Similar to IE8, IE9’s Compatibility View will map to IE7 Standards Mode, and IE9’s UA string when in Compatibility View will be:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)

In Compatibility View, IE9 reports itself as IE7 through the application version number (Mozilla/4.0) and version token (MSIE 7.0). This is done for compatibility. An incremented Trident token, from ‘Trident/4.0’ to ‘Trident/5.0’, allows websites to distinguish between IE9 running in Compat View and IE8 running in Compat View.

(重点是我加的)。因此,用户代理字符串与它自己报告的“Mozilla/4.0”和 MSIE 7.0 相同,但 IE9 将始终为 Trident/5.0 - 无论它是 MSIE 7.0、MSIE 8.0 还是 MSIE 9.0。

实际上你应该看看这个很棒的汇编:Browser ID (User-Agent) Strings甚至更好useragentstrings.com

关于JavaScript:如果 IE9 处于 IE7 或 IE8 兼容模式,我可以检测到它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5825385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com