首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery $.browser是否已弃用?

jQuery $.browser是否已弃用?
EN

Stack Overflow用户
提问于 2012-03-10 01:15:17
回答 6查看 111.6K关注 0票数 78

谁能告诉我,我认为jQuery的$.browser已经被弃用了,这是对的吗?

我现有的实现会继续工作吗?如果不是,是否有一个易于实现的替代方案。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-03-10 01:18:36

来自the documentation

$.browser属性在jQuery 1.3中已被弃用,其功能可能会在jQuery的未来版本中移至团队支持的插件中。

所以,是的,它被弃用了,但您现有的实现将继续工作。如果删除了该功能,则很可能使用插件即可轻松访问。

至于是否有其他选择。答案是“是的,很可能”。使用$.support进行功能检测比使用浏览器检测要好得多:检测您需要的实际功能,而不是提供它的浏览器。在不同的浏览器中,最重要的特性都会被检测出来。

更新2013年2月16日:在jQuery 1.9中,此功能已被删除(docs)。最好不要使用它。如果你真的,真的需要使用它的功能,你可以用jQuery Migrate插件恢复它。

票数 69
EN

Stack Overflow用户

发布于 2013-01-21 09:10:36

第二个问题

我现有的实现会继续工作吗?如果不是,是否有一个易于实现的替代方案。

答案是,但不是没有一点工作。

$.browser是一个官方插件,它包含在旧版本的jQuery中,所以像任何插件一样,您可以简单地复制它并将其合并到您的项目中,也可以简单地将其添加到任何jQuery版本的末尾。

我已经为你提取了代码,以防你想要使用它。

代码语言:javascript
复制
// Limit scope pollution from any deprecated API
(function() {

    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;

    jQuery.sub = function() {
        function jQuerySub( selector, context ) {
            return new jQuerySub.fn.init( selector, context );
        }
        jQuery.extend( true, jQuerySub, this );
        jQuerySub.superclass = this;
        jQuerySub.fn = jQuerySub.prototype = this();
        jQuerySub.fn.constructor = jQuerySub;
        jQuerySub.sub = this.sub;
        jQuerySub.fn.init = function init( selector, context ) {
            if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
                context = jQuerySub( context );
            }

            return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
        };
        jQuerySub.fn.init.prototype = jQuerySub.fn;
        var rootjQuerySub = jQuerySub(document);
        return jQuerySub;
    };

})();

如果你问为什么有人需要一个折旧的插件,我已经准备好了以下答案。

首先也是最重要的答案是兼容性。由于jQuery是基于插件的,一些开发人员选择使用$.browser和jQuery的最新版本,该版本不包括$.browser,所有这些插件都是无用的。

jQuery确实发布了一个migration plugin,它是为开发人员创建的,用于检测他们的插件是否使用了任何折旧的依赖项,如$.browser。

尽管这有助于开发人员修补他们的插件,但jQuery完全放弃了$.browser,所以在您的开发人员修补或整合以上内容之前,上述修复可能是唯一的解决方案。

关于 jQuery.browser

票数 95
EN

Stack Overflow用户

发布于 2013-09-13 00:29:47

在这里,我提出了一种基于功能可用性来检测浏览器的替代方法。

要仅检测IE,可以使用以下命令:

代码语言:javascript
复制
if(/*@cc_on!@*/false || typeof ScriptEngineMajorVersion === "function")
{
    //You are using IE>=4 (unreliable for IE11)
}
else
{
    //You are using other browser
}

要检测最流行的浏览器:

代码语言:javascript
复制
if(/*@cc_on!@*/false || typeof ScriptEngineMajorVersion === "function")
{
    //You are using IE >= 4 (unreliable for IE11!!!)
}
else if(window.chrome)
{
    //You are using Chrome or Chromium
}
else if(window.opera)
{
    //You are using Opera >= 9.2
}
else if('MozBoxSizing' in document.body.style)
{
    //You are using Firefox or Firefox based >= 3.2
}
else if({}.toString.call(window.HTMLElement).indexOf('Constructor')+1)
{
    //You are using Safari >= 3.1
}
else
{
    //Unknown
}

此答案已更新,因为IE11不再支持条件编译( /*@cc_on!@*/false技巧)。

有关此主题的更多信息,请查看Did IE11 remove javascript conditional compilation?

我使用了他们在那里提出的建议。

或者,您可以使用typeof document.body.style.msTransform == "string"document.body.style.msTransform !== window.undefined,甚至'msTransform' in document.body.style

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9638247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档