Такое jQuery $.браузер устарел?


может кто-нибудь сказать мне, если я прав, полагая, что jQuery $.браузер является / был устаревшим?

будут ли мои существующие реализации продолжать работать? Если нет, есть ли простая в реализации альтернатива.

6 76

6 ответов:

С документация:

долларов.собственность браузер является устаревшим в jQuery 1.3, а его функциональность может быть перемещен в команде-поддерживает плагин в будущей версии библиотеки jQuery.

Итак, да, он устарел, но ваши существующие реализации будут продолжать работать. Если функциональность будет удалена, она, вероятно, будет легко доступна с помощью плагина.

есть ли альтернатива... Ответ "да, наверное." Это гораздо, гораздо лучше, чтобы сделать функцию обнаружения с помощью $.support вместо обнаружения браузера: определите фактическую функцию, которая вам нужна, а не браузер, который ее предоставляет. При этом обнаруживаются наиболее важные функции, которые варьируются от браузера к браузеру.


Обновление 16 Февраля 2013: в jQuery 1.9 эта функция была удалена ( docs). Гораздо лучше не использовать его. Если вы действительно, действительно должны использовать его функциональность, вы можете восстановить его с jQuery Migrate плагин.

Второй Вопрос

будут ли мои существующие реализации продолжать работать? Если нет, то есть ли легко реализовать альтернативу.

ответ да, но не без труда.

$.браузер-это официальный плагин, который был включен в более старые версии 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 основан на плагинах, некоторые разработчики решили использовать $.браузер и с последними выпусками jQuery, который не включает $.браузер все те плагины, где отображается бесполезный.

jQuery и все-таки выпустит миграция плагин, который был создан для разработчиков, чтобы определить, использовал ли их плагин какие-либо амортизированные зависимости, такие как $.браузер.

хотя это помогло разработчикам исправить их плагин. jQuery упал $.браузер полностью, поэтому вышеуказанное исправление, вероятно, является единственным решением, пока ваши разработчики не исправят или не включат вышеуказанное.

о:jQuery.браузер

здесь я представляю альтернативный способ обнаружения браузера, основанный на доступности функций.

чтобы обнаружить только IE, вы можете использовать это:

if(/*@cc_on!@*/false || typeof ScriptEngineMajorVersion === "function")
{
    //You are using IE>=4 (unreliable for IE11)
}
else
{
    //You are using other browser
}

для обнаружения наиболее популярных браузеров:

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 трюк).
Вы можете проверить удалил ли IE11 условную компиляцию javascript? для получения дополнительной информации по этой теме.
Я использовал предложение они представили там.
Кроме того, вы можете использовать typeof document.body.style.msTransform == "string" или document.body.style.msTransform !== window.undefined или даже 'msTransform' in document.body.style.

Обновлено! 3/24/2015 (прокрутите ниже hr)

lonesomeday ' s ответ абсолютно правильно, я просто подумал, что добавлю этот лакомый кусочек. Я сделал метод некоторое время назад для получения браузера в Vanilla JS и в конечном итоге изогнул его, чтобы заменить jQuery.browser в более поздних версиях jQuery. Это не мешает какой-либо части нового jQuery lib, но обеспечивает ту же функциональность традиционного

"долларов.собственность браузер является устаревшим в jQuery 1.3, а его функциональность может быть перемещен в команде-поддерживает плагин в будущей версии библиотеки jQuery."

от http://api.jquery.com/jQuery.browser/

из официальной документации по адресу http://api.jquery.com/jQuery.browser/:

это свойство было удалено в jQuery 1.9 и доступно только через jQuery.перенести плагин.

вы можете использовать, например,jquery-migrate-1.4.1.js сохранить ваш существующий код или плагины, которые используют $.браузер все еще работает, пока вы находите способ полностью избавиться от $.браузер из вашего кода в будущем.