Подтвердить что ты не робот

Обнаружение браузера jQuery 1.9

В более ранних версиях я использовал для проверки, должен ли я запускать popstate вручную при загрузке страницы, потому что Chrome запускает его сразу после загрузки, а Firefox и IE этого не делают.

if ($.browser.mozilla || $.browser.msie) {
    $(window).trigger('popstate');
}

Теперь, когда они сбросили объект браузера в 1.9, как мне проверить эти браузеры? Или как мне понять, нужно ли мне popstate на загрузке страницы или нет?

Код:

$(function(){
    $(window).on('popstate', popState);

    // manual trigger loads template by URL in FF/IE.
    if ($.browser.mozilla || $.browser.msie) {
       $(window).trigger('popstate');
    }
});

Update

Пошел для этого:

    function popState(e){
        var initial = e.originalEvent === undefined || e.originalEvent.state === null;
        if(!initial){
            activateRoute({
                key: e.originalEvent.state.key,
                settings: e.originalEvent.state.settings
            },'replace');
        }
    }

    function init(){
        $(window).on('popstate', popState);

        $(function(){
            var route = getRoute(document.location.pathname);
            activateRoute(route, 'replace');
        });
    }
4b9b3361

Ответ 1

Вы должны добавить небольшую проверку работоспособности к своему обработчику popstate и убедиться, что он не делает ничего дороже, если вы "поп" в том же состоянии, в котором вы начали. Тогда вам не все равно, и вместо этого просто назовите свой popstate на готовом документе:

$(function(){
    $(window).on('popstate', popState);

    // call popstate on document ready
    $(popstate);
});

Ответ, предполагающий, что вы вставляете код из $.browser обратно в вашу среду, - это излишний способ поддержки плохой практики. Вы можете обнаружить 99% вещей, которые вам нужны. Почти любое использование $.browser опасно. Почти всегда есть способы обнаружить это.

Сообщество JavaScript уже давно не работает с браузером. Здесь - сообщение от 2009 года, рассказывающее нам, почему это плохая идея. Есть много других.

Я прошу вас не копировать $.browser обратно в ваш код, команда jQuery решила убить его по какой-то причине.

Ответ 2

Здесь - это быстрый способ решить эту проблему. Добавьте эту строку кодов в jQuery-1.9.js и замените $.browser на jQuery.browser

jQuery.browser = {};
jQuery.browser.mozilla = /mozilla/.test(navigator.userAgent.toLowerCase()) && !/webkit    /.test(navigator.userAgent.toLowerCase());
jQuery.browser.webkit = /webkit/.test(navigator.userAgent.toLowerCase());
jQuery.browser.opera = /opera/.test(navigator.userAgent.toLowerCase());
jQuery.browser.msie = /msie/.test(navigator.userAgent.toLowerCase());

здесь

Ответ 3

Я предполагаю, что этот код сделает трюк для вас. Не забудьте внести изменения, если вам нужно согласно вашему требованию.

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 Docs

Мы не рекомендуем использовать это свойство; попробуйте использовать функцию (см. jQuery.support). jQuery.browser может быть перемещен в плагин в будущей версии jQuery.

jQuery.browser

jQuery.support