JavaScript:我可以检测IE9是否在IE7或IE8兼容模式下?

Dee*_*000 87 javascript ie8-compatibility-mode internet-explorer-9

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

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

我假设文档模式无效,因为我的脚本加载到的页面可能是强制怪癖或强制特定设置.

我希望IE9具有一些存在的属性,无论是在7,8或9模式下都可以测试.


编辑添加...

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

如果我留在IE9或兼容IE9浏览器模式,并尝试将文档模式下拉变种来代替的话,我其实做得到"三叉戟/ 5.0"存在于所有8种组合(双浏览器模式和4种文档模式).我只需要避免选择浏览器模式IE7和IE8,因为它们确实是(模拟)IE7和IE8.

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

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

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

感谢您通过您的建议和链接指导我的答案.

Den*_*s G 67

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

介绍IE9的用户代理字符串:

与IE8类似,IE9的兼容性视图将映射到IE7标准模式,而兼容性视图中的IE9的UA字符串将是:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)
Run Code Online (Sandbox Code Playgroud)

在兼容性视图中,IE9通过应用程序版本号(Mozilla/4.0)和版本令牌(MSIE 7.0)将自身报告为IE7.这样做是为了兼容性.从"Trident/4.0"到"Trident/5.0"的递增三叉戟令牌允许网站区分在Compat View中运行的IE9和在Compat View中运行的IE8.

(我强调的是).因此,用户代理字符串与报告自身为"Mozilla/4.0"和MSIE 7.0相同,但IE9将始终为Trident/5.0 - 无论是MSIE 7.0,MSIE 8.0还是MSIE 9.0.

实际上你应该看看这个伟大的编译:浏览器ID(用户代理)字符串甚至更好useragentstrings.com


Yuh*_*Bao 47

document.documentMode 是文档模式的最佳方式.

  • 请稍微扩展一下答案.更多背景. (17认同)
  • 这确实是最好的方式.您可以这样使用它:`<script> if(document.documentMode == 7)alert("哟,把它放在正常模式下,会是吗?")</ script>`.真实的(!)IE7和所有非IE返回'undefined',只有Comp8中的IE8/9.模式返回7.我无法测试IE10,但应该是相同的. (5认同)
  • 为什么不是人们加上这个,它究竟是什么需要 (3认同)
  • 只是在IE10的边缘META标签上试过这个; 通常,它返回"10".强制所有站点的兼容模式,它仍然返回"10". (2认同)

Gre*_*reg 20

IE7不包含有关Trident的任何信息

User-Agent : Mozilla/4.0 (compatible; MSIE 7.0)
Run Code Online (Sandbox Code Playgroud)

IE8包含这个字符串:"Trident/4.0"

User-Agent : Mozilla/4.0 (compatible; MSIE 8.0; Trident/4.0)
Run Code Online (Sandbox Code Playgroud)

IE9包含这个字符串:"Trident/5.0"

IE9在兼容模式下:

User-Agent : Mozilla/4.0 (compatible; MSIE 7.0; Trident/5.0)
Run Code Online (Sandbox Code Playgroud)

IE9在正常模式下:

User-Agent : Mozilla/5.0 (compatible; MSIE 9.0; Trident/5.0)
Run Code Online (Sandbox Code Playgroud)

  • Internet Explorer 10用户Trident/6.0 ....请参阅http://blogs.msdn.com/b/ie/archive/2012/07/12/ie10-user-agent-string-update.aspx (3认同)

Dr.*_*lle 11

我希望IE9具有一些存在的属性,无论是在7,8或9模式下都可以测试.

检查例如style.opacity,它是在IE9中引入的,无论兼容模式如何都可用:

<![if IE]> 
<script>
if(typeof document.documentElement.style.opacity!='undefined')
{
  //this must be at least IE9 
}
</script>
<![endif]>
Run Code Online (Sandbox Code Playgroud)

  • 该死,你的权利.我找到了另一个属性,在每种模式下都适合我:**window.performance** (7认同)