如何使用jQuery检测IE7?

46

如何使用jQuery可能使用jQuery.browser检测IE7?


6
浏览器检测 = 代码异味 - spender
1
反问:在IE7中,你需要做什么不同的事情? - Piskvor left the building
3
如果你在检查浏览器以使页面布局或行为更好,那么使用伪造的用户代理字符串来打败代码是可以的。如果用户使用Firebug编辑页面并使所有按钮停止工作,那也没关系;显然这只是他们为了娱乐自己而做的事情 :-) - Pointy
7
欢迎来到现实世界。 - Sliq
@Panique:使用此代码的问题在于它不可靠,可能会在未来出现错误。这是非常真实的情况。特性检测就能解决这个问题。 - James Westgate
显示剩余5条评论
3个回答

70

有一个方法

if ($.browser.msie  && parseInt($.browser.version, 10) === 7) {
  alert('IE7'); 
} else {
  alert('Non IE7');
}

-- 更新

请注意,$.browser在jQuery 1.9中被移除


请参阅文档中的$.browser:“包含从navigator.userAgent读取的用户代理标志。我们建议不要使用此属性,请尝试改用特性检测(请参见jQuery.support)。在未来的jQuery版本中,jQuery.browser可能会移动到插件中。” - James Westgate
$.browser:自从jQuery 1.4以来,我们一直在宣传通过用户代理字符串进行浏览器检测是一个不好的想法。然而,我们通过继续提供$.browser来支持这种不良实践。从jQuery 1.9开始,我们将完全删除它,您需要使用1.9兼容插件。 - James Westgate
2
这个已经从jQuery 1.9中移除了 - 请参考下面的替代方法。 - James Westgate
在IE的开发者工具中,如果选择文档模式作为7以进行兼容性检查,则代码不会捕获该问题。要解决此问题,您可以在if语句中添加document.documentmode。如果($.browser.msie && (parseInt($.browser.version, 10) == 7 || document.documentMode == 7)) - Hamid Tavakoli

52

请参阅 $.browser。这个特性已经被弃用,您应该考虑使用$.support

回答问题,这是一种非常可靠的技术,主要用于样式表,但也可以轻松用于检查浏览器版本,或者最好作为选择器的一部分。

  1. 使用以下标记(来自HTML5 Boilerplate):

    <!--[if lt IE 7]><html class="ie6"><![endif]-->
    <!--[if IE 7]><html class="ie7"><![endif]-->
    <!--[if IE 8]><html class="ie8"><![endif]-->
    <!--[if gt IE 8]><!--><html><!--<![endif]-->
    <head>
    
  2. 在jQuery中使用hasClass选择器

  3. $('html').hasClass('ie7');
    $('html.ie7 .myclass').dostuff();
    
  4. 并将其作为CSS中正常选择器的一部分使用

  5. .mydiv {max-height:50px}
    .ie6 .mydiv {height:50px} /* ie6 max-height fix */
    

3
@Marcel,有一些破坏性行为很难实现功能检测,主要是布局错误。另一个例子是IE遇到的问题,即图像的不同透明度,这些图像本身是带有 alpha 通道的PNG图像。你怎么可能“检测”出这个问题呢? - Pointy
2
@Pointy - 当然,还有IE 6中的悬停问题...话虽如此,我会使用条件注释来包含不同的JavaScript代码块。这比测试用户代理字符串更可靠。 - Marcel Korpel
1
当您在Markdown列表中使用代码片段时,代码需要向右额外缩进四个空格 :) - Tim Post
3
@JamesWestgate 他们可能存在红绿色盲障碍问题……这会影响到5-10%的用户;) - James McCormack
1
这是一个很棒的答案。没有使用浏览器嗅探,很好地运用了符合HTML5BP标准的条件注释。我会经常使用这个。 - Alan Shortis
显示剩余2条评论

8

综合考虑其他因素:

if ($.browser.msie && $.browser.version == 7) {

    //do something

    };

应该可以工作。然而这是否是正确的做法就是另一个问题了。


2
这个已经从jQuery 1.9中移除了。 - Zymotik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接