web-dev-qa-db-fra.com

détection de navigateur jQuery 1.9

Dans les versions précédentes, j'avais l'habitude de tester si je devais déclencher popstate manuellement au chargement de la page, car Chrome le déclenchait juste après le chargement, contrairement à Firefox et IE.

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

Maintenant qu'ils ont abandonné l'objet de navigateur dans la version 1.9, comment devrais-je tester ces navigateurs? Ou comment puis-je déterminer si je dois popstate au chargement de la page ou non?

Le code est:

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

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

Mettre à jour

Je suis allé pour ça:

    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');
        });
    }
18
bevacqua

Vous devez ajouter un peu de contrôle de cohérence à votre gestionnaire popstate et assurez-vous qu'il ne fait rien de coûteux si vous "sautez" dans le même état que celui dans lequel vous avez démarré. Ensuite, vous ne pouvez pas vous soucier du navigateur, mais appelez simplement votre popstate sur le document prêt:

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

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

La réponse qui vous suggère de coller le code à partir de $.browser dans votre environnement est trop longue pour supporter une mauvaise pratique. Vous pouvez détecter 99% des choses dont vous avez besoin. Presque chaque utilisation de $.browser est dangereuse. Il y a presque toujours des moyens de détecter cela.

La communauté JavaScript s'oppose depuis longtemps à la détection de navigateur. Ici est un article de 2009 nous expliquant pourquoi c'est une mauvaise idée. Il y en a beaucoup d'autres.

Je vous prie de ne pas copier le $.browser dans votre code, l'équipe de jQuery a décidé de le tuer pour une raison.

21
gnarf

Ici est un moyen rapide de résoudre ce problème . Ajoutez cette ligne de codes à votre jQuery-1.9.js et remplacez $ .browser par 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());

ici

7
Azade

Je suppose que mettre ce code ferait l'affaire pour vous. N'oubliez pas d'apporter des modifications si vous avez besoin selon vos besoins. 

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;

Pour votre information - jQuery Docs

Nous déconseillons d'utiliser cette propriété; S'il vous plaît essayez d'utiliser la fonctionnalité détection à la place (voir jQuery.support). jQuery.browser peut être déplacé vers un plugin dans une future version de jQuery.

jQuery.browser

jQuery.support

5
Techie

ce lien pourrait vous aider si vous voulez https://github.com/jquery/jquery-migrate/#readme

0
Arbejdsglæde