如何使用jQuery检测IE 8?

时间:2010-02-04 18:52:35

标签: javascript jquery

我不仅要检测浏览器类型,还需要使用jQuery检测版本。 大多数情况下,我需要确定它是否是IE 8。

我不确定我是否正确地做到了。

如果我这样做:

if (jQuery.browser.version >= 8.0) {
dosomething}

我不确定它适用于版本8.123.45.6还是它?

编辑:请注意,JQuery 2+已经放弃了对IE8及更低版本的支持,因此无法再用于检测IE8。如果使用当前版本的JQuery,则必须使用非JQuery解决方案。

12 个答案:

答案 0 :(得分:173)

我认为最好的方法是:

来自HTML5样板:

<!--[if lt IE 7]> <html lang="en-us" class="no-js ie6 oldie"> <![endif]-->
<!--[if IE 7]>    <html lang="en-us" class="no-js ie7 oldie"> <![endif]-->
<!--[if IE 8]>    <html lang="en-us" class="no-js ie8 oldie"> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en-us" class="no-js"> <!--<![endif]-->
JS中的

if( $("html").hasClass("ie8") ) { /* do your things */ };

特别是因为已经从jQuery 1.9 +中删除了$.browser

答案 1 :(得分:89)

这适用于所有IE8次要版本

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

- 更新

请注意,$.browserremoved from jQuery 1.9

答案 2 :(得分:79)

记录在jQuery API Documentation中。使用$.browser.msie检查Internet Explorer,然后使用$.browser.version检查其版本。

更新: $.browser removed in jQuery 1.9

  

jQuery.browser()方法自jQuery 1.3以来已被弃用,并在1.9中被删除。 如果需要,它可以作为jQuery Migrate插件的一部分使用。我们建议对像Modernizr这样的库使用特征检测。

答案 3 :(得分:56)

不要忘记您也可以使用HTML来检测IE8。

<!--[if IE 8]>
<script type="text/javascript">
    ie = 8;
</script>
<![endif]-->

在你所有的脚本之前让你只需检查“ie”变量或其他什么。

答案 4 :(得分:27)

如果浏览器不是IE8,

document.documentMode 是未定义的,

标准模式返回8,“兼容IE7”返回7

如果它作为IE7运行,则会有很多不支持的css和dom功能。

答案 5 :(得分:15)

...假设

  • ...这是你感兴趣的旧版IE浏览器的粗糙渲染引擎,使旧版IE中的样式看起来正确(否则,使用特征检测)
  • ... 不能只为HTML添加条件评论 - 例如对于可以应用于任何页面的JS插件(否则,只需在<body><html>上执行条件类的技巧)

...那么这可能是最好的技巧(基于this non-jQuery, slightly less flexible variant)。它创建然后测试然后删除适当的条件注释。

(在IE10 +'标准模式'中忽略了条件注释 - 但这应该没问题,因为IE10 +'标准模式'没有疯狂的渲染引擎!)

放入此功能:

function isIE( version, comparison ){
    var $div = $('<div style="display:none;"/>');

    // Don't chain these, in IE8 chaining stops some versions of jQuery writing the conditional comment properly
    $div.appendTo($('body'));
    $div.html('<!--[if '+(comparison||'')+' IE '+(version||'')+']><a>&nbsp;</a><![endif]-->');

    var ieTest = $div.find('a').length;
    $div.remove();
    return ieTest;
}

然后像这样使用它:

if(isIE()){ /* runs in all versions of IE after 4 before standards-mode 10 */ }

if(isIE(8)){ /* runs in IE8 */ }

if(isIE(9)){ /* runs in IE9 */ }

if(isIE(8,'lte')){ /* runs in IE8 or below */ }

if(isIE(6,'lte')){ /* if you need this, I pity you... */ }

我还建议缓存此函数的结果,这样您就不必重复它了。例如,您可以使用字符串(comparison||'')+' IE '+(version||'')作为密钥来存储和检查某个对象中的此测试结果。

答案 6 :(得分:9)

注意:

1)$ .browser似乎在jQuery 1.9+中被删除(如Mandeep Jain所述)。 <{3}}代替使用recommended

2)当浏览器处于“兼容性”模式时,.support可以在IE&gt; 7中返回“7”。

3)从IE 10开始,$.browser.version将不再有效。

4)jQuery 2.0+将删除conditional comments

5)document.documentMode似乎在Internet Explorer 8+浏览器中定义为。返回的值将告诉您Internet Explorer正在运行的“兼容性”模式。但仍然不是一个好的解决方案。

我尝试了很多.support()选项,但似乎当IE浏览器(9+)处于兼容模式时,它的行为就像IE 7 ...... :(

到目前为止,我只发现了这种情况(kind-a):

(如果未定义documentMode并且不支持htmlSerialize和opacity,那么您很可能会看到IE&lt; 8 ...)

if(!document.documentMode && !$.support.htmlSerialize && !$.support.opacity) 
{
    // IE 6/7 code
}

答案 7 :(得分:5)

如果你摆弄浏览器版本,它往往不会带来任何好处。你不想自己实现它。但你可以由保罗爱尔兰和其他聪明的人制作Modernizr。它将检测浏览器实际上可以做什么,并在<html>元素中放置适当的类。但是使用Modernizr,您可以像这样测试IE版本:

$('html.lt-ie9').each() {
    // this will execute if browser is IE 8 or less
}

类似地,您可以使用.lt-ie8.lt-ie7

答案 8 :(得分:3)

您还应该查看jQuery.support。功能检测比浏览器检测更可靠,可以对您的功能进行编码(除非您只是尝试记录浏览器版本)。

答案 9 :(得分:3)

您可以使用此jquery

轻松检测浏览器的类型和版本
$(document).ready(function()
{
 if ( $.browser.msie ){
    if($.browser.version == '6.0')
    {   $('html').addClass('ie6');
    }
    else if($.browser.version == '7.0')
    {   $('html').addClass('ie7');
    }
    else if($.browser.version == '8.0')
    {   $('html').addClass('ie8');
    }
    else if($.browser.version == '9.0')
    {   $('html').addClass('ie9');
    }
 }
 else if ( $.browser.webkit )
 { $('html').addClass('webkit');
 }
 else if ( $.browser.mozilla )
 { $('html').addClass('mozilla');
 }
 else if ( $.browser.opera )
 { $('html').addClass('opera');
 }
});

答案 10 :(得分:1)

Here是用于识别浏览器/操作系统检测的Jquery浏览器检测插件。

包含插件后,您可以将其用于样式目的。

$("html").addClass($.os.name);
$("body").addClass($.browser.className);
$("body").addClass($.browser.name);

答案 11 :(得分:0)

您可以使用$ .browser来检测浏览器名称。可能的值是:

  • webkit(从jQuery 1.4开始)
  • safari(已弃用)
  • 歌剧
  • MSIE
  • Mozilla浏览器

或获取布尔标志:如果浏览器是MSIE,$ .browser.msie将为true。

对于版本号,如果您只对主版本号感兴趣 - 可以使用parseInt($。browser.version,10)。无需自己解析$ .browser.version字符串。

无论如何,$ .support属性可用于检测对特定功能的支持,而不是依赖于$ .browser。