jquery判断IE 6

来源:互联网 发布:linux 线程 参数 编辑:程序博客网 时间:2024/06/08 12:09

以前我的判断方法一直是版本+版本号: if($.browser.msie&&($.browser.version==6.0))

但发现一个惊天bug。

jquery是根据userAgent的version值正则判断的,但是如果在windows2008k中,会把windows NT 6.0误认为是ie6.0,导致将ie8误认成ie6。

$.browser方法jquery官方已经不赞成使用了。建议的方法是$.support,但我把所有的属性值都测试完毕后发现没有一个能只检测出IE6的,最后发现$.support.style在IE6和IE7中返回值为false。

那么取他们属性的交集便可以准确判断IE6了。

所以:

if($.brower.msie&&($.browser.version==6.0)&&!$.support.style)


转自:http://www.fuziba.com/2012/02/29/jquery%E5%87%86%E7%A1%AE%E5%88%A4%E6%96%ADie6/



======================================================================




网上流传着这几个版本:

$.browser.msie && ($.browser.version == "6.0")

$.browser.msie && ($.browser.version == "6.0") && !$.support.style

$.browser.msie && ($.browser.version.substring(0, 1) < 7)

 

运行起来看似都正常,但是都不行。因为在某些操作系统下,即使IE8,navigator.userAgent也会含有MSIE 6.0的字符,例如:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; GTB6; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; CIBA; .NET CLR 3.5.30729; .NET CLR 3.0.30618)

以上判断会把上面情况的IE8判断为IE6。

 

 @不羁虫 分析了jQuery.browser.version的原理,解释了为什么会把被上面的agent字符串分析成IE6。

地址:http://hi.baidu.com/bujichong/blog/item/759904fa689f079e58ee9045.html

 

参考了  @不羁虫 的正则表达式,下面是一个方案:

    var userAgent = navigator.userAgent.toLowerCase();

    var browserId = userAgent.match(/(firefox|chrome|safari|opera|msie)/)[1];

    var browserVersion = (userAgent.match(new RegExp('.+(?:version)[\/: ]([\\d.]+)')) || userAgent.match(new RegExp('(?:'+browserId+')[\/: ]([\\d.]+)')) || [0,'0'])[1];

    var isIe6 = (browserId + browserVersion == "msie6.0");

 

在IE7、IE8、IE9、chrome下测试为false,IE6中测试为true。暂时没什么问题,供大家参考。


转自:http://hi.baidu.com/cnkarl/item/2d871d10b615a8ee9913d6c6