wake-up-neo.com

jQuery 1.9 Browsererkennung

In früheren Versionen habe ich getestet, ob ich popstate manuell beim Laden der Seite auslösen soll, da Chrome dies unmittelbar nach dem Laden auslöst und Firefox und IE dies nicht tun.

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

Nun, da sie das Browserobjekt in 1.9 abgelegt haben, wie soll ich diese Browser testen? Oder wie stelle ich fest, ob ich popstate beim Laden der Seite verwenden muss oder nicht?

Der Code lautet:

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

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

Aktualisieren

Ging dafür:

    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

Sie sollten Ihrem popstate-Handler eine kleine Sanitätsprüfung hinzufügen und sicherstellen, dass dies nicht teuer ist, wenn Sie in den gleichen Zustand "springen", in dem Sie begonnen haben Popstate auf Dokument bereit:

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

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

Die Antwort, dass Sie den Code von $.browser wieder in Ihre Umgebung einfügen, ist viel zu viel, um eine schlechte Praxis zu unterstützen. Sie können 99% der Dinge erkennen, die Sie benötigen. Fast jede Verwendung von $.browser ist gefährlich. Es gibt fast immer Möglichkeiten, dies zu erkennen.

Die JavaScript-Community ist seit langem gegen das Browser-Sniffing. Hier ist ein Beitrag aus 2009, der uns sagt, warum es eine schlechte Idee ist. Es gibt viele andere.

Ich bitte Sie, $.browser nicht zurück in Ihren Code zu kopieren. Das jQuery-Team hat beschlossen, es aus einem bestimmten Grund zu töten.

21
gnarf

Hier ist ein schneller Weg, um dieses Problem zu lösen ... Fügen Sie diese Codezeile zu Ihrer jQuery-1.9.js hinzu und ersetzen Sie $ .browser durch 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());

Hier

7
Azade

Ich denke, das Setzen dieses Codes würde den Trick für Sie tun. Vergessen Sie nicht, Änderungen vorzunehmen, wenn Sie es gemäß Ihrer Anforderung benötigen. 

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;

Zu Ihrer Information - jQuery Docs

Wir empfehlen die Verwendung dieser Eigenschaft. Bitte versuchen Sie es mit der Funktion stattdessen Erkennung (siehe jQuery.support). Der jQuery.browser wird möglicherweise nach .__ verschoben. ein Plugin in einer zukünftigen Version von jQuery.

jQuery.browser

jQuery.support

5
Techie

dieser Link kann es aktivieren, wenn Sie wollen https://github.com/jquery/jquery-migrate/#readme

0
Arbejdsglæde