我需要知道通过用户代理字符串将自己标识为 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。
因此,页面、非开发者用户、元标记或微软的兼容性列表不可能将 IE9 置于这种无法识别的状态。
只要使用if(navigator.userAgent.indexOf("Trident/5")>-1)
就足够了。
别担心,这不适用于样式、格式、逻辑或页面内容。我对这些事情使用特征检测。我只需要检测 IE9(不管它处于什么模式)并对此做出非页面内容决定。
感谢您通过您的建议和链接引导我找到答案。