我的日常

登录/注册
您现在的位置:论坛 资料库 前端开发 > jQuery browser msie 判断 浏览器版本
总共48087条微博

动态微博

查看: 2608|回复: 2

jQuery browser msie 判断 浏览器版本

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2015-01-07 16:44:33 |只看该作者 |倒序浏览
        今天发现网页中的一个脚本错误,经检查发现是使用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最终还是会解决的。希望园子里的朋友能提出更好的解决方案


    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    admin    

    1244

    主题

    544

    听众

    1万

    金钱

    管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    沙发
    发表于 2015-01-07 16:44:44 |只看该作者
    补充说明上面说的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就会被忽略掉。
    回复

    使用道具 举报

    1

    主题

    0

    听众

    117

    金钱

    三袋弟子

    该用户从未签到

    板凳
    发表于 2016-11-18 16:48:36 |只看该作者
    受教了!这个论坛果然很不错,适合学习
    回复

    使用道具 举报

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表