jquery - jQuery $.browser 是否已弃用?

标签 jquery browser

有人可以告诉我我认为 jQuery 的 $.browser 已被弃用/已弃用是否正确吗?

我现有的实现是否会继续有效?如果没有,是否有易于实现的替代方案。

最佳答案

第二个问题

Will my existing implementations continue to work? If not, is there an easy to implement alternative.

答案是是的,但并非没有一点工作。

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

我已经为您提取了代码,以备您使用。


// 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

关于jquery - jQuery $.browser 是否已弃用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9638247/

相关文章:

javascript - 从 HH :mm in JS 计算平均值

javascript - 为什么浏览器并不总是在执行 JavaScript 之前完成对前面 HTML 的渲染?

http - 如何解释 Firefox 和 Safari 对用户提供的包含多个 # 符号的 URI 的不同处理方式?哪个是 'right' ?

c++ - ATL 窗口中的 WebBrowser 控件。如何在窗口卸载时释放内存?我卡住了

google-chrome - 有没有办法恢复已删除的 chrome 缓存文件?

php - 在调用自定义 PHP 函数后,在 jquery 数据表中添加额外的列吗?

Javascript 使用 for 循环获取 id` 的最后一个字符

jQuery 延迟() 或 setTimeout()

jquery - 在 PrettyPhoto 开放公共(public)功能上应用设置

javascript - 如何使用 Rxjs switchMap 抛出错误