jQuery.browser脚本或填充程序,用于向后兼容1.9.1的插件
我正在尝试使用quicksand jquery插件,我在jquery 1.9.1中遇到此错误。
“未捕获的TypeError:无法读取未定义的属性’msie’”
我知道msie是jQuery.browser属性上的标志jQuery.browser自1.3版以来已被弃用,并在jQuery 1.9.0中被删除
这就是导致错误的原因。 但是有没有一个解决办法让流沙再次起作用?
任何帮助或建议都会很棒!
提前致谢!
Intrepid开发人员的注意事项
jQuery.browser
和jQuery.support
上的(少数)强制性词语:
jQuery.browser
包含useragent的标志,从navigator.userAgent读取。 我们建议不要使用此属性 ; 请尝试使用function检测(请参阅jQuery.support
)。jQuery.browser
可能会在未来的jQuery版本中移动到插件中。使用特征检测是一种很好的做法,而不是使用
$.browser
来检测当前用户代理并根据运行的浏览器更改页面显示。 为了简化这个过程,jQuery执行了许多这样的测试并设置了jQuery.support
对象的属性。
故事的道德:更新您的项目,消除对jQuery.browser
依赖,并在必要时使用特征检测。 要测试和查找项目过度依赖已弃用或已删除的方法或属性的区域,请参阅jQuery-migrate
。
另请参阅Modernizr.js和YepNope.js以获取jquery特征检测的替代方法。
一个用于替换$.browser
jQuery shim文件,由fancyBox-rails项目提供:
// jQuery 1.9 has removed the `$.browser` property, fancybox relies on // it, so we patch it here if it's missing. // This has been copied from jQuery migrate 1.1.1. if ( !jQuery.browser ) { var uaMatch = function( ua ) { ua = ua.toLowerCase(); var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || /(webkit)[ \/]([\w.]+)/.exec( ua ) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || /(msie) ([\w.]+)/.exec( ua ) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || []; return { browser: match[ 1 ] || "", version: match[ 2 ] || "0" }; }; matched = uaMatch( navigator.userAgent ); browser = {}; if ( matched.browser ) { browser[ matched.browser ] = true; browser.version = matched.version; } // Chrome is Webkit, but Webkit is also Safari. if ( browser.chrome ) { browser.webkit = true; } else if ( browser.webkit ) { browser.safari = true; } jQuery.browser = browser; }
https://github.com/hecticjeff/fancybox-rails/blob/master/vendor/assets/javascripts/jquery.browser.js
您正在使用包含code
(ie $.browser)
quicksand
插件,该code
从版本1.9
开始从jQuery
中删除。