由于jQuery 1.9.0以上版本jquery去掉了对$.browser的支持,采用$.support来判断浏览器类型,导致之前的很多插件报错。
"Uncaught TypeError: Cannot read property 'msie' of undefined".
网上有很多解决办法如:
判断浏览器类型:
<span style="white-space:pre"> </span>$.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:
// Old
<span style="white-space:pre"> </span>if ($.browser.msie && 7 > $.browser.version) {}
// New
<span style="white-space:pre"> </span>if ('undefined' == typeof(document.body.style.maxHeight)) {}
检查是否为IE6-8:
<span style="white-space:pre"> </span>if (!$.support.leadingWhitespace) {}
**************************************************************************
下面,我们采取的思路是,使用jquery的继承机制对jquery 1.11.1版本(对jquery 1.10.12版本也同样有效)进行扩展,使其支持$.browser方法,以达到兼容之前组件的目的.
jQuery.extend({
browser: function()
{
var
rwebkit = /(webkit)\/([\w.]+)/,
ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
rmsie = /(msie) ([\w.]+)/,
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
browser = {},
ua = window.navigator.userAgent,
browserMatch = uaMatch(ua);
if (browserMatch.browser) {
browser[browserMatch.browser] = true;
browser.version = browserMatch.version;
}
return { browser: browser };
},
});
function uaMatch(ua)
{
ua = ua.toLowerCase();
var match = rwebkit.exec(ua)
|| ropera.exec(ua)
|| rmsie.exec(ua)
|| ua.indexOf("compatible") < 0 && rmozilla.exec(ua)
|| [];
return {
browser : match[1] || "",
version : match[2] || "0"
};
}
将以上代码保存为jquery-browser.js使用即可。
评论
本文评论功能已关闭。