Browser melden sich traditionell und historisch bedingt mit ziemlich kryptischen Namen. Mein aktueller Chrome z.B.:
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22
Der Brauch, so viel wie möglich Buzzwords in den String navigator.userAgent zu packen entspringt dem Browsersniffing. Sollte ein Webentwickler nach Gecko (Rendering-Engine von Firefox) suchen und dann einen gewissen Inhalt ausliefern, wären andere Browser benachteiligt. Und deshalb finden sich eben in jedem Browsername alle Bezeichnungen wieder.
Im neuen IE11 aus der geleakten Windows Blue-Version springt jetzt auch Microsoft auf den Zug auf:
Mozilla/5.0 (IE 11.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko
Die 4 Buchstaben MSIE, nach denen gerne geflitert wurde, sind verschwunden. Stattdessen ist jetzt der IE auch „wie Gecko“. Klar, man kann die Motivation von Microsoft verstehen: Oft läuft ein „Notprogramm“, sobald MSIE im User-Agent gefunden wurde. Der IE11 aber ist ein anständiger Browser und möchte kein vorsintflutliches Tabellenlayout ausgeliefert bekommen, was für den IE6 vllt. noch angemessen gewesen wäre.
In diesem Sinne: Nie nach Namen filtern (jQuery hat $.browser auch schon rausgeschmissen), sondern nach Features. Kann der Browser Canvas? Dann verwende ich es. Sonst eben ein Fallback. Modernizr leistet da gute Dienste.
Das Problem daran ist dass es auch Bugs in Browserversionen gibt die nicht via Feature-Detection erkennbar sind. Beispiel:
Wir erstellen ein iFrame und wollen das drucken, mittels Javascript. Also das iFrame-Element erstellen, Seite laden (src setzen oder Content injecten), und iframe.print() aufrufen. Funktioniert in allen Browsern außer dem IE 8+9, der druckt die komplette Seite und nicht den iFrame wenn im iFrame Bilder drin sind, die noch nicht fertig geladen sind wenn print() aufgerufen wird. Also muss man beim IE8+9 ein Timeout von einer Sekunde einbauen und hoffen dass die Bilder dann fertig geladen sind.
Ist nur ein Beispiel, gibt noch viele andere kuriose Dinge, für die man bei einzelnen Versionen Dinge anders machen muss.
Solche Workarounds, die man nicht via Feature-Detection aktivieren kann, sind dann nicht mehr anwendbar, und wir brauchen wahrscheinlich nicht hoffen dass der IE11 keine Workarounds benötigt…