原文地址:
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模式窗口插件 。
jquery jqmodal demo 示例 例子 包含了官居网站所能运行例子的源码 本文非原创..压缩包中已注明出处.. 5分共享.望各位理解.. 里边已经带了样式图片..直接运行即可..具体开发自行参照
在本篇文章中,我们将详细探讨如何使用jQuery及其扩展插件jqmodal来实现一个功能完备、样式美观的弹出窗口。首先,要实现这一功能,需要先了解几个关键知识点:jQuery基础、jqmodal插件的工作机制、以及CSS样式的...
jqModal是一款基于jQuery库的弹窗插件,它以其强大的功能和灵活性在前端开发中被广泛使用。这个插件允许开发者轻松地创建模态对话框,为用户提供一种交互式的体验,同时不会离开当前页面。在网页应用中,弹窗常常...
在网页开发中,jQuery 是一个广泛使用的 JavaScript 库,它极大地简化了 JavaScript 的操作,包括DOM处理、事件处理、动画效果以及Ajax交互等。而jQuery弹出窗口、模式窗口(Modal Dialogs)和模式层(Modal Layers...
轻量级的弹出窗口jQuery插件,压缩后仅仅3.65Kb,基于jQuery1.4.2开发,主要实现弹出框的效果,并且加入了很多有趣的功能,比如callback函数,显示隐藏层,Ajax页面,iframe嵌入页面……
| 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前,需要确保已引入jQuery库。然后,你可以通过下载或直接链接到jqModal的JS和CSS文件来添加到你的项目中。例如: ```html <link rel="stylesheet" href="jqModal.css" /> <script src="jquery.js"> ...
在这个实例中,Flexigrid与Struts2、JSON和jQuery进行了集成,构建了一个功能丰富的Web应用。 Struts2是Apache软件基金会的一个开源MVC框架,用于构建Java Web应用程序。它提供了强大的动作调度、拦截器机制以及...
jqModal 插件的js和css样式文件;配合博客文章:http://blog.csdn.net/yangkai_hudong/article/details/46051149使用
jqModal所需要的CSS源码,这是一个非常强大有助的源码,希望大家喜欢。
在本例中,开发者提到已经使用过jqModal,但感觉不够灵活,因此自行编写了一个jQuery弹出框插件。 首先,我们来看看`aa.html`文件,这很可能是包含HTML结构和jQuery弹出框使用示例的网页。HTML是超文本标记语言,...
JQuery的插件jqGrid是一个非常强大的工具,它可以帮助开发者快速地在Web应用中创建复杂且功能全面的数据表格。随着版本的迭代,jqGrid已经更新到了4.0版本,尽管版本更新带来了许多新特性,但其核心功能仍然保持一致...
而jqGrid作为jQuery的一个强大插件,更是将数据展示与交互功能推向了新的高度。本文将深入探讨jqGrid包的核心功能及其在网页表格展示中的应用,旨在为初学者及进阶用户提供全面的指导。 #### jqGrid包概述 jqGrid包...
`index.html`可能是包含这些资源引用的一个示例网页,用于展示如何将jQuery和jqModal整合到实际项目中。 接下来,我们看到几个可能包含网站模板的ZIP文件: 1. `36-web-buttons-collection.zip`:这个文件可能包含...
总之,jqGrid是一个强大且功能丰富的jQuery插件,它简化了数据网格的实现,提供了丰富的交互性和灵活性,适用于各种数据密集型的Web应用程序。通过熟练掌握jqGrid的使用,开发者能够更高效地开发出用户友好的数据...
jqGrid是一款基于jQuery的开源数据网格插件,它提供了一种强大且灵活的方式来展示和操作表格数据。jqGrid支持多种功能,包括数据的动态加载、排序、分页、编辑、过滤和自定义样式等,使得网页开发人员能够轻松创建...
jqGrid 是一个基于 jQuery 库的强大表格插件,它提供了丰富的功能,如数据的动态展示、增删改查操作、分类显示以及在线编辑等。在本文中,我们将深入探讨 jqGrid 的主要特性和使用方法。 首先,让我们了解 jqGrid ...
Jpolite 框架是基于 jQuery 开发的一个轻量级门户框架,它的设计目标是实现内容、展示和事件的分离,从而使得开发者能够更加便捷地构建和管理门户应用。框架的核心特性在于其灵活的内容模块展示方式,允许将内容以...
总的来说,jqGrid是一个强大的表格插件,它通过灵活的配置和丰富的功能,为开发者提供了创建复杂表格的便利。在实际项目中,根据具体需求选择合适的配置和插件组合,可以构建出满足各种业务场景的表格应用。