如何使用jQuery检测IE 8?

我需要检测不仅浏览器types,而且使用jQuery的版本。 大多数情况下,我需要找出是否是IE 8或不。

我不确定是否正确。

如果我做 :

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

我不确定它会为版本8.123.45.6或将它?

编辑:请注意,JQuery 2+已经下降了对IE8和以下的支持,因此不能再用于检测IE8。 如果使用当前版本的JQuery,则需要使用非JQuery解决scheme。

它在jQuery API文档中有logging 。 用$.browser.msie检查Internet Explorer,然后用$.browser.msie检查它的版本。

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

从jQuery 1.3开始,jQuery.browser()方法已被弃用,并在1.9中被删除。 如果需要,它可以作为jQuery Migrate插件的一部分。 我们build议使用Modernizr等库来进行function检测。

我认为最好的办法是这样的:

来自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+中删除。

这应该适用于所有IE8次要版本

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

– 更新

请注意, $ .browser 已从jQuery 1.9中移除

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

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

有了之前所有的脚本将让你只需检查“ie”variables或任何。

如果浏览器不是IE8, document.documentMode是undefined,

它返回8为标准模式和7为'compatable到IE7'

如果它运行的是IE7,那么很多css和domfunction将不被支持。

假设…

  • …这是你感兴趣的老版本的IE浏览器的笨重的渲染引擎 ,使旧式IE浏览器的样式看起来正确(否则,使用function检测)
  • …你不能只是添加条件注释到HTML – 例如对于可以应用到任何页面的JS插件(否则,只要在<body><html>上执行条件类的技巧)

…这可能是最好的技巧(基于这个非jQuery,稍微不灵活的变体 )。 它创build然后testing,然后删除一个适当的条件注释。

(条件注释在IE10 +“标准模式”中被忽略 – 但这应该没问题,因为IE10 +“标准模式”没有一个疯狂的渲染引擎!)

放下这个function:

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

我也build议caching这个函数的结果,所以你不必重复它。 例如,可以使用string(comparison||'')+' IE '+(version||'')作为关键字来存储和检查某个对象的testing结果。

注意:

1)$ .browser似乎被放在jQuery 1.9+中(正如Mandeep Jain所指出的那样)。 build议使用.support代替。

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正在运行的“兼容性”模式。 但仍然不是一个好的解决scheme。

我尝试了许多.support()选项,但似乎当一个IE浏览器(9 +)处于兼容模式,它将简单地performance得像IE 7 … 🙁

到目前为止,我只发现这个工作(kind-a):

(如果documentMode没有定义,htmlSerialize和opacity不被支持,那么你很可能看着IE <8 …)

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

如果你捣鼓浏览器版本,它往往不会很好。 你不想自己实现它。 但你可以通过保罗·爱尔兰人和其他聪明的人做的Modernizr 。 它会检测浏览器实际上可以做什么,并在<html>元素中放入合适的类。 但是用Modernizr ,你可以像这样testingIE版本:

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

相似的,你可以使用.lt-ie8.lt-ie7

你也应该看看jQuery.support 。 function检测比用浏览器检测编码你的function更可靠(除非你只是试图logging浏览器版本)。

你可以很容易地使用这个jQuery来检测浏览器的types和版本

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

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

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

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

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

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

或者得到一个布尔标志:如果浏览器是MSIE,$ .browser.msie将为true。

至于版本号,如果你只对主版本号感兴趣 – 你可以使用parseInt($。browser.version,10)。 不需要自己parsing$ .browser.versionstring。

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