点这里,说点啥?
jQuery中浏览器版本判断的一个BUG,影响多个jQuery插件的应用
这个问题被关注是应为我用了一个款插件,thickbox,弹出居中的对话层。
问题出现的时候比较奇怪,在某些ie7下的时候,它没有垂直居中,而是拉下来了(浮动到浏览器底部),这个问题比较奇怪,因为做兼容性测试的时候没有出现这个问题。
经测试,在某些ie7正常,某些ie7就出问题。查看源码,发现是在浏览器版本控制上出现了问题:
问题源码:
- if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) {
- $("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
- }
我简单的写了一个判断:
- alert(Query.browser.msie+"--"+jQuery.browser.version)}
发现在出现问题的浏览器(ie7)上,显示ie的版本是ie6。也是google了这个bug,发现这个bug由来已久:
- version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]
这个正则判断有bug,导致了ie的版本检测出错。深层次的原因了在不同的版本(系统),相同的浏览器版本的userAgent(navigator.userAgent)都有差异,导致了version 正则匹配有误。
ok,问题找到了,解决方法比较简单,就是重写这个正则,完整的代码(包含在):
- $().ready(function(){
- var userAgent = navigator.userAgent.toLowerCase();
- jQuery.browser = {
- version: (userAgent.match( /.(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
- safari: /webkit/.test( userAgent ),
- opera: /opera/.test( userAgent ),
- msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
- mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
- };
- //alert(jQuery.browser.msie+"--"+jQuery.browser.version);
- });$
问题解决!


















