如何使用jQuery检测IE 8?


102

我不仅需要使用jQuery检测浏览器类型,还需要检测版本。通常,我需要找出它是否是IE 8。

我不确定自己是否做得正确。

如果我做 :

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

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

编辑:请注意,JQuery 2+已放弃了对IE8及以下版本的支持,因此不能再用于检测IE8。如果使用当前版本的JQuery,则必须使用Non-JQuery解决方案。


11
下面建议的答案建议您使用jQuery.browser。但是,jQuery文档不赞成使用jQuery.browser。相反,他们建议您使用jQuery.support并指向不支持的功能来标记浏览器。例如,您可以使用if(jQuery.support.opacity == false){您的IE8和IE7代码}
IberoMedia 2012年

jquery.support.opacity就是我想要的。谢谢...
nrod


如果您做的正确,则几乎不需要进行浏览器版本检测。从jQuery中删除此功能是有原因的,原因是浏览器版本检测是不正确的做法。相反,使用特征检测将解决几乎所有情况下的问题。
Spudley 2013年

2
我需要检测IE8,因为它是唯一使用JavaScript引擎的浏览器,其运行速度如此之慢,以至于它在此页面上弹出一个对话框,提示您“是否要停止运行脚本”,默认值为“是”。如果有为此功能的检测机制,我将使用它。否则,如果浏览器== IE8。我无法优化javascript,因为它是Kendo自己的treeview代码引起的
PandaWood 2014年

Answers:


79

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

更新: $ .browser在jQuery 1.9中删除

从jQuery 1.3开始不推荐使用jQuery.browser()方法,在1.9中已将其删除。如果需要,它可以作为jQuery Migrate插件的一部分使用。我们建议对诸如Modernizr之类的库使用特征检测。


如果这样做:if(jQuery.browser.version> = 8.0){dosomething}我不确定它是否适用于版本8.123.45.6还是可以?
salmane

13
它是一个字符串,所以您应该这样做if(jQuery.browser.version.substring(0, 2) == "8.") { ... }。这样,它将可以与IE8的所有版本一起使用。
AndiDog,2010年

13
jQuery.browser在1.3中已弃用,将来可能会移至插件。参见jQuery.browser文档
bentytree

幸运的是,它仍然存在,没有提及弃用,@ bendytree
Alastair

47
jquery.browser在1.9中被删除
Mandeep Jain

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 */ };

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


11
这是检测IE版本的非常聪明的方法。我非常喜欢!
格雷格

但是,如果您的网站交付时带有“ Content-type:application / xhtml + xml”标头,则这些条件注释将被忽略
philipp 2012年

1
非常聪明……但是值得注意的是,您需要检查HTML5BP中条件语句添加的当前类。目前,我认为课程是lt-ie9AOTie8
byronyasgur 2013年

2
@meo我也喜欢这个实现。但是,是否有类附加到类<html>而不是附加类的原因<body>
2013年

@meo有趣。谢谢。
2013年


56

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

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

在所有脚本之前都准备好了这些,就可以让您仅检查“ ie”变量或其他内容。


4
此语法还支持“小于”(“ [if lt IE 7]”)和“大于”(“ [if IE 7]”)比较器。
spiffytech

1
<!-[if lte IE 8]>包括ie8
user227353

1
这是最好的方法,只需重定向到另一页,上面写着“为什么要使用IE8?”。现在升级!
Leon Gaban 2014年

2
按照今天的标准,我想问问他们为什么要使用IE。
TheBuzzSaw 2014年

这看起来是最好的解决方案,因为JQuery 2.1.1不适用于IE8,因此无法用于检测IE8!
戴夫2014年

27

如果浏览器不是IE8,则document.documentMode未定义,

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

如果它作为IE7运行,则将不支持很多CSS和DOM功能。


9
请注意,IE9返回9。不过,既然$ .browser不再是一个好的解决方案,这应该是一个更高的答案。试试:if ((document.documentMode || 100) < 9) { // IE8
唐·麦卡迪

if(document.documentMode!==未定义&& document.documentMode == 8){...}
jpprade,2015年

对于某些仍大量使用IE8的应用程序(即美国学校),@ Don McCurdy的方法既简单又有效。与Modernizr配合使用,效果很好。
cbmtrx

好答案!这将返回IE8到IE11的版本号(相比IE5到IE9的有条件注释-如果仍然有人需要检测真正的IE7或IE6,则需要使用有条件注释)。请注意,根据文档0页面加载时可能会返回-“尝试在以后确定文档兼容模式”(即,在文档准备就绪后)。
user56reinstatemonica8 2013年

15

假设...

  • ...这是笨拙的渲染引擎您要检测的旧版本IE,以使样式在旧IE中看起来正确(否则,请使用功能检测)
  • ...您不能只向HTML添加条件注释 -例如,适用于可应用于任何页面的JS插件(否则,只需在<body>或上执行条件类的技巧即可<html>

...那么这可能是最好的技巧(基于此非jQuery,灵活性稍差一些)。然后创建测试,然后删除适当的条件注释。

(在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||'')作为键来存储并检查某个对象中某个对象的测试结果。


9

注意:

1)$ .browser似乎已在jQuery 1.9+中删除(如Mandeep Jain所述)。这是推荐使用。支持来代替。

2)$ .browser.version当浏览器处于“兼容”模式时,可以在IE> 7中返回“ 7”。

3)从IE 10开始,条件注释将不再起作用。

4)jQuery 2.0+将放弃对IE 6/7/8的支持

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

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

到目前为止,我只发现这可行(种类-a):

(如果未定义documentMode,并且不支持htmlSerialize和opacity,那么您很有可能查看IE <8 ...)

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

5

如果您摆弄浏览器版本,那么它经常会带来不好的结果。您不想自己实现它。但是您可以使用Paul Irish和其他聪明人制作的Modernizr。它将检测浏览器实际上可以做什么,并将适当的类放入<html>element中。但是,使用Modernizr,您可以测试IE版本,如下所示:

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

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



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');
 }
});

1

这里是Jquery浏览器检测插件,用于识别浏览器/操作系统检测。

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

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

0

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

  • webkit(从jQuery 1.4开始)
  • 野生动物园(已淘汰)
  • 歌剧
  • ie
  • Mozilla

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.