替换Now-Removed $ .browser属性

时间:2013-01-16 21:39:45

标签: javascript jquery

  

可能重复:
  Why is $.browser deprecated - and what is a better alternative?

我历史上使用jQuery中的$ .browser属性来确定浏览器。我发现它非常有用和有用。

我也有历史上最新版本的jQuery。像这样:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

好吧,显然jQuery 1.9没有,并且对此属性的支持已被删除。

有没有人知道一个好的jQuery插件可以作为替代?

我知道推荐的方法是使用$ .support,我有时会使用它。

但有时候更容易知道有人在使用什么浏览器。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

浏览器对象只是为您解析navigator.userAgent。如果你这么倾向,你总是可以自己解析。

没有什么可以阻止你从旧的JQuery版本中提取代码然后将它放入你自己的jquery插件中。

Jquery docs建议不要使用浏览器对象,甚至声明它容易受到欺骗:

  

因为$ .browser使用navigator.userAgent来确定平台,   它容易受到用户的欺骗或虚假陈述的影响   浏览器本身。最好避免使用特定于浏览器的代码   尽可能完全。 $ .support属性可用   检测对特定功能的支持而不是依赖   $ .browser。

答案 1 :(得分:0)

你总是可以去消息来源。

这不是我的代码,这是改编自jQuery源代码

DEMO:http://jsfiddle.net/KKwqU/

JS:

function ExtendJqueryBrowser(){

 jQuery.extend({browser:{}});

 function uaMatch(ua){
     ua = ua.toLowerCase();
     var rwebkit = /(webkit)[ \/]([\w.]+)/,
     ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
     rmsie = /(msie) ([\w.]+)/, 
     rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/;
     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" };
 }

    var browserMatch = uaMatch( navigator.userAgent );
    if ( browserMatch.browser ) {
     jQuery.browser[ browserMatch.browser ] = true;
     jQuery.browser.version = browserMatch.version;
    }

    // Deprecated, use jQuery.browser.webkit instead
    if ( jQuery.browser.webkit ) {
     jQuery.browser.safari = true;
    }
}