Browser erkennen, die von jQuery (2) nicht unterstützt werden
Verzeih mir, wenn es eine offensichtliche Antwort auf diese Frage gibt, aber ich konnte sie nicht finden. Ich überlege, auf jQuery 2 umzusteigen, und möchte Nutzern mit nicht unterstützten Browsern mitteilen, dass sie die Site nicht verwenden können, obwohl ich ältere Browser nicht unterstützen möchte.
Ich sehe hier (http://blog.jquery.com/2013/03/01/jquery-2-0-beta-2-released/), dass Sie bedingte Kommentare verwenden können, um .js-Dateien in verschiedenen IE-Versionen zu verzweigen, aber ich glaube, dass jQuery 2.0 die Unterstützung für eine Reihe anderer Browser einstellt, nicht nur für den IE.bearbeiten: das ist falsch, siehe größere Bearbeitung unten].
In einer idealen Welt würde ich zu jQuery 2 wechseln und dann eine einzige Javascript-Funktion haben, die aufgerufen wird, wenn mir jQuery mitteilt, dass sie den Browser nicht unterstützt. Gibt es einen einfachen Weg, den ich vermisse?
Vielen Dank.
BEARBEITEN:
Ich bin auf diesen Beitrag gestoßen (http://bugs.jquery.com/ticket/13404) was mich hierher geführt hat:http://jquery.com/browser-support/. Es stellt sich heraus, dass sich jQuery 2 in Bezug auf die Unterstützung nur von jQuery 1.9 in IE-Browsern unterscheidet. Dementsprechend ist es vielleicht besser zu fragen, wie Browser erkannt werden, die von jQuery nicht unterstützt werden (im Allgemeinen nicht nur Version 2). Ich habe den Fragentitel aktualisiert.
EDIT2:
Da die Featureerkennung der empfohlene Ansatz für dieses Problem ist, ist die jQuery-Unterstützungsmethode hier relevant (http://api.jquery.com/jQuery.support/). Es scheint jedoch auch ziemlich zweifelhaft, sich darauf zu verlassen (da es sich ohne Vorankündigung ändern kann).
Ich nehme an, das schafft die Schlüsselfrage.Wie soll ich eine Vorstellung davon haben, welche jQuery-Funktionen möglicherweise von alten Browsern nicht unterstützt werden? Wenn zum Beispiel jemand mit einer 4-Versions-alten Kopie von Firefox auf die Site kommt, hätte ich das nicht getanirgendein Ahnung, auf welche Funktionen ich testen müsste. Es wäre ein Ass, wenn jQuery einen vollständig unterstützten Funktionstest anbieten könnte, wie beispielsweise den folgenden für HTML5:http://html5test.com/
EDIT3:
Okay, mit den bedingten include-Anweisungen (hervorgehoben in den Antworten unten und auf der jQuery-Site) können Sie mit alten Versionen von IE umgehen. Bei anderen Browsern ist dies jedoch etwas schwierig. Da Sie sich nicht darauf verlassen können, dass jQuery Sie über die Unterstützung der Funktion x, y oder z durch den Browser informiert, besteht mein Ansatz darin, einfach das zugrunde liegende Javascript abzufragen. Wenn Sie CSS-basierte Unterstützung abfragen möchten, können Sie modernizr verwenden. Für Javascript-basierte Unterstützung ist dies die Methode, die ich verwende, um SUPER alte Versionen anderer Browser zu erkennen:
function browser_ok() {
if (
( !Array.prototype.indexOf ) ||
( !Array.prototype.forEach ) ||
( !String.prototype.indexOf ) ||
( !String.prototype.trim ) ||
( !Function.prototype.bind ) ||
( !Object.keys ) ||
( !Object.create ) ||
( !JSON ) ||
( !JSON.stringify ) ||
( !JSON.stringify.length ) ||
( JSON.stringify.length < 3 )
)
{
return false;
}
// # local storage support
// source: http://diveintohtml5.info/storage.html
try {
var local_storage_support = ( 'localStorage' in window && window['localStorage'] !== null );
if ( !local_storage_support ) {
throw new Error("local_storage_support: failed");
}
}
catch ( e ) {
return false;
}
// # AJAX uploads
if ( !window.FormData || !window.FileReader ) {
return false;
}
// # HTML data elements
var body = $("body");
body.data("browser_support_test",42);
if ( body.data("browser_support_test") !== 42 ) {
return false;
}
else {
body.removeData("browser_support_test");
}
return true;
}
AFAICT, diese Funktion sollte alle Browser eliminieren, die für die Grundfunktionalität von jQuery Probleme bereiten könnten. Wenn Sie etwas Besonderes tun möchten, gibt es wahrscheinlich eine bestimmte Funktionalität, von der Sie wissen, dass Sie sie benötigen, sodass Sie sie gezielt überprüfen können.