jQuery 版本API删除造成的问题:
Cannot read property ‘msie’ of undefined错误的解决方法
项目中涉及到的jquery文件,发现有些页面报错Cannot read property ‘msie’ of undefined。通过网上查找发现问题主要原因是 .browser这个api从jQuery1.9开始就正式废除,js代码里只要用到 .browser就会报这个错。具体说明参见jQuery官方说明。
但是我这里错误原因是jquery-float.js文件中的错误,解决案例如下:
通过浏览器调试找到报错的地方:
var cssfixedsupport=.browers.mise && parseFloat(.browser.version) < 7;//判断是否ie6
修改后正常:
var cssfixedsupport=(/msie/.test(navigator.userAgent.toLowerCase())) && parseFloat($.browser.version) < 7;//判断是否ie6
扩展修改方法(将对应的浏览器判断替换为以下表达式即可):
判断浏览器类型:
.browser.mozilla=/firefox/.test(navigator.userAgent.toLowerCase());
.browser.webkit = /webkit/.test(navigator.userAgent.toLowerCase());
.browser.opera=/opera/.test(navigator.userAgent.toLowerCase());
.browser.msie = /msie/.test(navigator.userAgent.toLowerCase());
等号后面的表达式返回的就是 true/false, 可以直接用来替换原来的
.browser.msie等。检查是否为IE6://Oldif(
.browser.msie && 7 >
.browser.version)//Newif(‘undefined′==typeof(document.body.style.maxHeight))检查是否为IE6−8:if(!
.support.leadingWhitespace) {}
另外一种修改方法,发现jQuery 1.9把所有在之前版本里标记为deprecated的api都正式删除了,彻底不再向后兼容。对于升级到最新jQuery的童鞋而言,这意味着得花费一些额外的时间把代码升级使用新的api,或者自己另外实现这些被删除的方法。幸运的是,jQuery团队考虑到了这个改动带来的不便,推出了一个插件jQuery Migrate,这个插件能够自动恢复那些在最新版本里之后被废弃的API,从而让已有的js代码无须改动就能和最新的jQuery库一起正常运行。
下面是具体的解决方法,先下载最新的jQuery Migrate插件,然后在引用jQuery js的地方之后加上一行对jQuery Migrate js文件的引用即可。