`

jQuery browser msie 判断 浏览器 ie6 bug jQuery中浏览器版本判断的一个BUG,此BUG已影响到jqModal,thickbox

    博客分类:
  • IE
阅读更多

原文地址:

http://www.cnblogs.com/Dove/archive/2009/05/02/1447771.html

 

view plain

        今天发现网页中的一个脚本错误,经检查发现是使用jQuery.browser.version判断浏览器版本时将IE8.0返回成IE6.0了,网上搜索有同样的问题,但大部份人反映的结果都是正常的,再一测试原来问题了,因为我的测试环境是WIN2008(Windows NT 6.0),WIN2003或WINXP返回的结果都是正常的(Windows NT 5.2),查jQuery的源码时发现他是使用正则判断的version: (userAgent.match( /.+(?:rv|it|ra|ie)[//: ]([/d.]+)/ ) || [0,'0'])[1] ,应该是他把navigator.userAgent中的Windows NT 6.0 解析成IE6.0的版本号了。  
        问题找到了,那么就要找解决方法了。最直接的解决方法是修改jQuery的版本解析正则。由于考虑到如果升级jQuery时每次都要修改很麻烦,再一个jQuery最新版1.3.2的文档中已经声明jQuery.browser及jQuery.browser.version建议弃用,可以使用jQuery.support来代替,这也就是说后续版本中可能会放弃jQuery.browser了。  
    我的页面中使用jQuery.browser.version的目的是检测IE6,那么另一解决方案就是使用jQuery.support来代替了,查jQuery.support的属性说明中有boxModel可以检测出IE6,boxModel的具体说明如下:  
    boxModel: 如果这个页面和浏览器是以W3C CSS盒式模型来渲染的,则等于true。通常在IE 6和IE 7的怪癖模式中这个值是false。在document准备就绪前,这个值是null。  
    但经我测试IE6/IE7/IE8中返回的都是true,这个就是文档中的说明错误了(测试环境:WIN2003+IE6、WIN2003+IE7、WIN2008+IE8,全部为不同的机器)。那现在只好测试其它的属性了,但我把jQuery.support中其它的属性全部测试后都发现没有一个能直接检测出IE6的。Google了一下都是说用jQuery.browser.version来检测。这个在Windows6.0中是行不能的。难道没有其它解决办法了吗?仔细一想刚才在测试jQuery.support的属性时发现jQuery.support.style在IE6/IE7中返回false,只有IE8中返回true,这样我就可以间接地来检测IE6了,具体方法是:  
    $.browser.msie&&($.browser.version == "6.0")&&!$.support.style    
    因为jquery.browser.version能正常检测IE6和IE7,再结合!$.support.style就是IE6了。  
    最后这个问题也算是解决了,但还不是很完美,毕竟jquery.browser可能会被弃用,不过我想既然这是BUG,jQuery最终还是会解决的。希望园子里的朋友能提出更好的解决方案  

 

 

view plain

    补充说明上面说的jQuery.browser.version正则中6.0匹配的是Windows 6.0 是错误的,经测试真正的原因是由于Windows系统版本不同navigator.userAgent返回的值也有一定区别,从下面的值可以看出如下:   
    WIN2003+IE7 navigator.userAgent返回值:  
    Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)  
    WIN2008+IE8 navigator.userAgent返回值:  
    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)  
    修正的正则是这样的,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就会被忽略掉。  
分享到:
评论

相关推荐

    jqModal - jQuery模式窗口插件

    jqModal - jQuery模式窗口插件 。

    jquery jqmodal demo 示例 例子 使用

    jquery jqmodal demo 示例 例子 包含了官居网站所能运行例子的源码 本文非原创..压缩包中已注明出处.. 5分共享.望各位理解.. 里边已经带了样式图片..直接运行即可..具体开发自行参照

    jQuery+jqmodal弹出窗口实现代码分明

    jQuery+jqmodal弹出窗口的制作方法,需要的朋友可以参考下。

    jqModal弹窗插件

    jqModal是我认为最强大方便的一个jquery弹窗插件

    一个可以取代jqmodal的弹出框插件

    轻量级的弹出窗口jQuery插件,压缩后仅仅3.65Kb,基于jQuery1.4.2开发,主要实现弹出框的效果,并且加入了很多有趣的功能,比如callback函数,显示隐藏层,Ajax页面,iframe嵌入页面……

    jquery jqGrid 4 7 1 zip下载 css js plugins src

    | jqModal js | jquery fmatter js | jquery jqGrid js | JsonXml js">css | ellipsis xbl xml | ui jqgrid css js | i18n | grid locale en js | grid locale cn js | grid locale js | Changes txt | install txt ...

    jqModal 插件的js文件

    jqModal 插件的js和css样式文件;配合博客文章:http://blog.csdn.net/yangkai_hudong/article/details/46051149使用

    jqModal.css

    jqModal所需要的CSS源码,这是一个非常强大有助的源码,希望大家喜欢。

    jQuery 弹出窗口 模式窗口 模式层

    全是网上找的 现在集中起来给大家 里面的内容有: JQweebox jqmodal firstebox ThickBox+3_1

    jquery弹出框

    用过了jqmodal后,发现应用起来不是很自如,就自己写了个。要用到jquery,大家如果急用,就将就着用吧……有时间了,我看看能不能加个托动功能……

    flexigrid+struts2+json+jquery实例

    一个基于flexigrid+struts2+json+jquery开发的实例,并拓展了一些功能: 1.添加了右键事件(查删改),jqmodal 2.实现了列百分比的显示 3.优化了查询界面

    前端项目-jqModal.zip

    前端项目-jqModal,jqmodal帮助您显示模态、弹出窗口和通知。它是灵活和微小的,并提供了一个通用的基础,为您的所有窗口需要。

    Javascript技巧之不要用for in语句对数组进行遍历

    一,为什么不要用for in语句 jqModal这个jquery插件估计很多人都使用过,在jqModal源码内部,有一个函数为hs,其中有个嵌套循环如下, 代码如下: for(var i in {jqmShow:1,jqmHide:1}) for(var s in this[i]) if(H...

    java弹出框效果

    利用jqModal控件进行弹出框效果,如忘记密码点击出现弹出框输入邮箱进行找回效果弹出框效果蛮不错的控件

Global site tag (gtag.js) - Google Analytics