Browserweichen mit Prototype

Es gibt ein undokumentiertes Objekt in Prototype, welches einem beim schreiben von JavaScript-Browserweichen sehr behilflich sein kann. Dieses Objekt ist in der Prototype-API nicht dokumentiert, da ja Crossbrowser-Probleme üblicherweise von Prototype übernommen werden sollen und deswegen dieses Objekt überflüssig sein sollte. Jedoch wird es intern in der Prototype.js verwendet.

An den meisten Stellen sollte es in der Tat überflüssig sein, jedoch fand ich mich schon manchmal in einer Situation, wo ich diese Funktionalitäten doch brauchte. Im folgenden möchte ich auf die Verwendung kurz eingehen.

Bisher hat man in JavaScript den Browser ermittelt, indem man geprüft hat, ob bestimmte Funktionen existieren. Beispiel:

if ( !!(window.attachEvent && !window.opera) )
	alert("You're surfing with IE");
else
	alert("Well done, you've switched :) ");

Prototype hat dazu ein Objekt „Browser“, welches entsprechende Abfragen bereits durchgeführt hat. Somit kann man den obigen Code wie folgt umschreiben und „verschönern“:

if ( Prototype.Browser.IE )
	alert("You're surfing with IE");
else
	alert("Well done, you've switched :) ");

Die Vorteile liegen auf der Hand:

  • der Code ist lesbarer und verständlicher
  • man braucht die kryptischen Browserweichen nicht genau zu kennen
  • man verwendet immer die selbe Browserweiche. Sollte es bei dieser mal Probleme geben (z.B. neue Browserversion), braucht man sie nur an einer Stelle umzuschreiben und zu testen.

Die folgenden Browserweichen sind in Prototype enthalten:

  • Prototype.Browser.IE
  • Prototype.Browser.Opera
  • Prototype.Browser.Webkit (Safarie, KHTML)
  • Prototype.Browser.Gecko
  • Prototype.Browser.MobileSafari

Leider verwendet Prototype beim erstellen dieses Browserobjekts nicht die von mir favorisierten Abfragen nach den Funktionen sondern fragt teilweise den UserAgent-String ab, welcher ja nicht zwingend bei Browsern der selben Version identisch ist. Plugins und manche internen Browserfunktionen können diesen UserAgent-String modifizieren. Bisher bin ich jedoch noch nicht auf Probleme gestoßen und habe dewegen noch keine alternative Implementierung vorgenommen, welche ich jetzt hier veröffentlichen könnte.

Was mir aber mal gefehlt hat, war die Unterscheidung zwischen IE6 und IE7. Im Zuge dessen habe ich eine kleine Erweiterung um folgende Objekte hinzugefügt:

//Maybe this could be done shorter, but I hope checking IE too makes it more reliable
Object.extend(Prototype.Browser, {
    IE6:     Prototype.Browser.IE && (typeof window.XMLHttpRequest == "undefined"),
    IE7:     Prototype.Browser.IE && (typeof window.XMLHttpRequest == "object")
});

Hinterlasse einen Kommentar

4 Kommentare auf "Browserweichen mit Prototype"

Benachrichtige mich zu:
avatar

Sortiert nach:   neuste | älteste | beste Bewertung
trackback
10 Jahre 5 Monate her

Browserweichen mit Prototype…

Browserweichen mit Prototype…

Jens Hoffmann
Gast
Jens Hoffmann
10 Jahre 5 Monate her
trackback
10 Jahre 4 Monate her

[…] meinem letzten Beitrag zu dem Thema “Browserweichen in JavaScript” gab es die Bemerkung, dass es in Mootools einfacher ist, entsprechende Weichen zu verwenden. […]

wpDiscuz
Weitere Beiträge zum Thema
QTTabBar: Mehr Funktionen für den Windows Explorer
Kundengebundene Fehler finden – Magento 2
Eindrücke von der Magento Imagine: Flagbit gewinnt den „Spirit of Excellence Award 2013“
FLOW3 könnte die PHP-Welt auf den Kopf stellen