修正jQuery.browser.version 在 IE 中版本判断 Bug

jQuery 提供了 browser 事件方便了我们判断访客用的什么浏览器以及版本,但是它却存在着Bug,例如像下面的userAgent,JQuery会判定浏览器为IE 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)

之所以出现这样原因是因为Jquery的一个正则表达式:

version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]

修正的正则是这样的,

version: (userAgent.match( /(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]

只要去掉前面的.+就行了,从上面的值可以看现WIN2008中的navigator.userAgent的返回值中前面的compatible; MSIE 8.0是真正的浏览器版本,面后面又加了一个compatible; MSIE 6.0(不清楚这个是作什么用的,应该IE7同样会有这个),而match正则匹配是如果加了.+(即匹配任何字符)前面的那个compatible; MSIE 7.0就会被忽略掉。

0 comments:

Post a Comment