我不仅要检测浏览器类型,还需要使用jQuery检测版本。 大多数情况下,我需要确定它是否是IE 8。
我不确定我是否正确地做到了。
如果我这样做:
if (jQuery.browser.version >= 8.0) {
dosomething}
我不确定它适用于版本8.123.45.6还是它?
编辑:请注意,JQuery 2+已经放弃了对IE8及更低版本的支持,因此无法再用于检测IE8。如果使用当前版本的JQuery,则必须使用非JQuery解决方案。
答案 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');
}
- 更新
答案 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)
document.documentMode 是未定义的,
标准模式返回8,“兼容IE7”返回7
如果它作为IE7运行,则会有很多不支持的css和dom功能。
答案 5 :(得分:15)
...假设
<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> </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来检测浏览器名称。可能的值是:
或获取布尔标志:如果浏览器是MSIE,$ .browser.msie将为true。
对于版本号,如果您只对主版本号感兴趣 - 可以使用parseInt($。browser.version,10)。无需自己解析$ .browser.version字符串。
无论如何,$ .support属性可用于检测对特定功能的支持,而不是依赖于$ .browser。