我昨天收到几个客户的投诉,称一些代码停止了工作。显然,问题出在使用已弃用的 jQuery.browser
插件上,该插件在 jQuery 1.9 发布后停止了工作。
我(简单地)查看了 1.9 变更文档,似乎他们希望我替换一些相当庞大的库来处理那个一个函数。
是否有推荐的最轻量级的插件或代码片段可以恢复该功能?
对于这些站点需要的内容,它非常基本;我只需要最基本的 IE vs FF vs everyone else 的检测。
有什么建议吗?
我昨天收到几个客户的投诉,称一些代码停止了工作。显然,问题出在使用已弃用的 jQuery.browser
插件上,该插件在 jQuery 1.9 发布后停止了工作。
我(简单地)查看了 1.9 变更文档,似乎他们希望我替换一些相当庞大的库来处理那个一个函数。
是否有推荐的最轻量级的插件或代码片段可以恢复该功能?
对于这些站点需要的内容,它非常基本;我只需要最基本的 IE vs FF vs everyone else 的检测。
有什么建议吗?
我使用了Alexx Roche提供的以下代码,但是我想要检测MSIE:
<script type="text/javascript">
$(document).ready(function() {
if (navigator.userAgent.match(/msie/i) ){
alert('I am an old fashioned Internet Explorer');
}
});
</script>
希望这能帮到你!
if (navigator.userAgent.match(/msie|trident/i)) {;}
。 - Martin Andersson为了在更新代码时允许向后兼容,jQuery Migrate被创建出来了。
https://github.com/jquery/jquery-migrate
作为一个奖励,当您使用它们时,它会记录已弃用的函数。在解决这些问题时,我建议您尝试一下它。此外,您应该为您的站点设置特定版本的jQuery。升级是好的,但务必在将其投入生产之前测试这些升级。如果您正在使用CDN,则仍然可以在文件名中指定特定版本。
现在,你所要求的不需要一个jQuery插件。查看navigator
对象。
appCodeName: "Mozilla"
appName: "Netscape"
appVersion: "5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17"
cookieEnabled: true
doNotTrack: null
geolocation: Geolocation
language: "en-US"
mimeTypes: MimeTypeArray
onLine: true
platform: "MacIntel"
plugins: PluginArray
product: "Gecko"
productSub: "20030107"
userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17"
vendor: "Google Inc."
vendorSub: ""
navigator.userAgent
。很容易就能看出字符串是否包含你要找的内容。(不要寻找精确匹配,因为版本号和插件显然会改变。) - Bradvar browser = {
chrome: false,
mozilla: false,
opera: false,
msie: false,
safari: false
};
var sUsrAg = navigator.userAgent;
if(sUsrAg.indexOf("Chrome") > -1) {
browser.chrome = true;
} else if (sUsrAg.indexOf("Safari") > -1) {
browser.safari = true;
} else if (sUsrAg.indexOf("Opera") > -1) {
browser.opera = true;
} else if (sUsrAg.indexOf("Firefox") > -1) {
browser.mozilla = true;
} else if (sUsrAg.indexOf("MSIE") > -1) {
browser.msie = true;
}
console.log(browser.msie);
将此代码放入您的网站中(例如JS文件或jQuery代码之后...):
var matched, browser;
// Use of jQuery.browser is frowned upon.
// More details: http://api.jquery.com/jQuery.browser
// jQuery.uaMatch maintained for back-compat
jQuery.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 = jQuery.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;
$.browser
为已弃用的问题。而且,是的,复制/粘贴需要遵守许可条款。请注意不要改变原意。 - Dave Methvin当我遇到同样的问题时,我使用了以下代码:
<script type="text/javascript">
$(document).ready(function() {
//if (!$.browser.webkit && ! $.browser.mozilla) { //depricated
if (!navigator.userAgent.match(/mozilla/i) &&
! navigator.userAgent.match(/webkit/i) ){
alert('Let me tell you about Mozilla');
}
});
</script>
http://code.jquery.com/jquery-1.8.3.min.js
只需用该链接替换你的jquery.js src,你的代码将继续运行,直到你准备前进并停止使用已弃用的功能。
注意:Fancybox2仍在使用$.browser,这是我迄今看到的最常见的一个更新。
更新:Slickgrid仍在使用$.browser
,截至2013年02月11日还没有更新。
我将jQuery.browser中的逻辑抽象成了一个插件jquery.browser。该插件使用MIT许可证发布。
我还添加了对IE11、Opera Webkit和Android的支持检测。
可以通过检查特定IE版本中添加的标准全局对象的存在来精确检测IE的版本。
10 or older document.all
9 or older document.all && !window.atob
8 or older document.all && !document.addEventListener
7 or older document.all && !document.querySelector
6 or older document.all && !window.XMLHttpRequest
5.x document.all && !document.compatMode
if (document.all && !document.querySelector) {
alert('IE7 or lower');
}
如果您只想让第三方jQuery插件能够使用jQuery.browser.msie,这里有一个一行代码的解决方法。只需在jQuery之后包含它即可。
jQuery.browser = jQuery.browser || {msie: navigator.userAgent.match(/msie/i) ? true : false};