点这里,说点啥?

jQuery中浏览器版本判断的一个BUG,影响多个jQuery插件的应用

2009年7月29日 09:25 | 分类:Js+ajax | 标签: | 人气:524℃

      这个问题被关注是应为我用了一个款插件,thickbox,弹出居中的对话层。

      问题出现的时候比较奇怪,在某些ie7下的时候,它没有垂直居中,而是拉下来了(浮动到浏览器底部),这个问题比较奇怪,因为做兼容性测试的时候没有出现这个问题。

     经测试,在某些ie7正常,某些ie7就出问题。查看源码,发现是在浏览器版本控制上出现了问题:

    问题源码:

  1. if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) {
  2. $("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
  3.     }

我简单的写了一个判断:

  1. alert(Query.browser.msie+"--"+jQuery.browser.version)}

发现在出现问题的浏览器(ie7)上,显示ie的版本是ie6。也是google了这个bug,发现这个bug由来已久:

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

这个正则判断有bug,导致了ie的版本检测出错。深层次的原因了在不同的版本(系统),相同的浏览器版本的userAgent(navigator.userAgent)都有差异,导致了version 正则匹配有误
ok,问题找到了,解决方法比较简单,就是重写这个正则,完整的代码(包含在):

  1. $().ready(function(){
  2. var userAgent = navigator.userAgent.toLowerCase();
  3. jQuery.browser = {
  4. version: (userAgent.match( /.(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
  5. safari: /webkit/.test( userAgent ),
  6. opera: /opera/.test( userAgent ),
  7. msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
  8. mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
  9. };
  10.     //alert(jQuery.browser.msie+"--"+jQuery.browser.version); 
  11. });$

问题解决!

如果你喜欢文本,你可以:Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
本文链接:http://www.fangleo.cn/?p=1097

为这篇文章说点什么吧?

您的名字: (*必填)

您的邮箱: (*不会被公布 ,必填))

您的网站: