Browserabfrage zu jQuery zurückholen

Schon vor einiger Zeit wurde davon abgeraten, die in jQuery eingebaute Browserabfrage mittels $browser zu nutzen. Normalerweise ist Feature Detection auch sinnvoller, als die Abfrage nach einem Browser. Doch genau wie bei CSS weiss man manchmal, dass der einzige Feind der IE ist. Dann ist die Identifikation des Browsers in meinen Augen okay.

Aktuell überarbeite ich eine kommunale Webseite. Dabei soll auch jQuery aktualisiert werden, nicht aber unbedingt alle eingebundenen Skripte – natürlich aus Kostengründen. Und so aktualisierte ich jQuery von Version 1.1.4 zur Version 1.10.2. Ein kleines Skript baute dabei auf die Browserdetection auf. Ich merkte es erst, als ein anderes Skript, eine Lightbox, nicht funktionierte, ich darin aber keine Fehler entdecken konnte.

Nach kurzer Suche stiess ich auf einen Artikel, dessen Autor offenbar ein ähnliches Problme wie ich hatte und der die Browserdetection nur für den IE isoliert hatte:

// bringt $.browser auch zu jQuery 1.9
jQuery.browser={};
(function(){
	jQuery.browser.msie=false;
	jQuery.browser.version=0;
	if(navigator.userAgent.match(/MSIE ([0-9]+)\./)){
		jQuery.browser.msie=true;jQuery.browser.version=RegExp.$1;
		}
})();

Ich habe dafür ein Gist erstellt.

1 Kommentar

  1. Die Vor- und Nachteile von Browser- vs. Feature-Detection wurden ja an vielen Stellen im Netz bereits ausführlich diskutiert, daher möchte ich an dieser Stelle nicht weiter darauf eingehen.

    Wenn man vor der Aufgabe steht, jQuery-Scripte aus der Jung-Steinzeit auf aktuelle Versionen zu hieven, können allerdings noch andere Probleme auftreten als nur ein fehlendes jQuery.browser. Im Laufe der Zeit hat sich durchaus auch verändert, was die jQuery-Funktion als valide Eingabe betrachtet, es gab Änderungen am Event-System (z.B. das Binding mittels .live() und .die() existiert nicht mehr) und vieles anderes.

    Da es durchaus einige Stellen im eigenen Code oder in fremden Plugins geben kann, der sich auf dieses veraltete Verhalten verlässt, kann eine solche Migration durchaus kniffeliger werden. Eine Hilfe bietet dabei das Plugin jquery-migrate des jQuery-Teams. Es kommt in zwei unterschiedlichen Variationen: Die „reguläre“ Version bildet einfach nur das alte Verhalten mit neuen jQuery-Versionen nach. Auch wenn dies der vermeintlich einfache, bequeme Weg ist, sollte diese Version möglichst nicht in Produktivumgebungen eingesetzt werden. Es ist und bleibt nach wie vor eine zeitweise „Krücke“, die nicht für den dauerhaften Betrieb vorgesehen ist.

    Viel interessanter und zielführender ist hingegen die „Development-Version“. Nach der Einbindung wird in der Entwicklerkonsole des Browsers eine Warnmelung angezeigt, falls das alte, nicht mehr unterstützte Verhalten im Code verwendet wird, so dass sich diese Stellen schnell lokalisieren und durch aktualisierten Code ersetzen lassen. Dadurch steht eine solche Überarbeitung auf deutlich stabileren Füßen und kann so länger als Grundlage des Projektes dienen.

    Eine Auflistung des geänderten bzw. nicht mehr unterstützten jQuery-Verhaltens findet sich in der Dokumentation des Projektes.