Hallo,
Freilich, Browserweichen sind per se problematisch, und es versteht sich von selbst, dass sie nicht hundert Prozent verlässlich sind. Das weiß man aber auch, ohne das Totschlagargument »wenn ich will, kann ich meinen Browser dermaßen kaputtkonfigurieren, dass man es niemals schafft, etwaigem Fehlverhalten durch Browsererkennungen zu begegnen« zu bringen.
Ich wollte auf eine Kleinigkeit hinweisen, die unter Umständen bei Browserweichen--so sie denn unbedingt erforderlich sind--eingebaut werden können. Opera kann man schließlich nicht nur am window.opera-Objekt erkennen.
Den Punkt erkenne ich prinzipiell an. Den Hinweis in allen Ehren, aber ich halte ihn bei der Frage, wie man am besten Opera erkennt, für nicht relevant.
Wenn man einen Opera als Opera zuverlässig erkennen will, dann ist window.opera definitiv das Mittel der Wahl. Die Erkennung über die Existenz von Objekten, die zum einen mit dem Hack sowieso nichts zu tun haben, zum anderen auch nur indirekt dazu dienen, um den Browser zu erschließen, ist mit Sicherheit noch unzuverlässiger. window.opera wurde genau deshalb geschaffen: Damit die Webautoren keine Erkennung über irgendwelche Objekte durchführen müssen, von denen man *momentan* zu wissen *glaubt*, ihre Existenz bedeute zwangsläufig die Verwendung des Opera-Browsers. Selbst wenn man beachtet, dass vielleicht einer unter hunderttausend Besuchern das window.opera-Objekt gefälscht hat, ist daher window.opera immer noch zuverlässiger und zukunftssicherer.
Im übrigen finden sich in der verlinkten Tabelle, soweit ich das sehe, kein einziges Merkmal, anhand dessen man eindeutig Opera erkennen könnte. Also muss man mehrere positive und negative Merkmale testen. Das scheint nicht kompliziert, aber Komplexität bedeutet hier Fehleranfälligkeit. Man kann eine solcher Erkennung auch schlecht zusätzlich zur Absicherung einer window.opera-Abfrage einsetzen.
Kristof stellt z.B. folgende Erkennung vor, die ohne window.opera auskommt:
if (!window.pkcs11 && !document.defaultCharset && !document.createRange) { alert("der Browser kann nur ein Opera sein"); }
Wunderbar, mit der Veröffentlichung von Opera 8 war diese Erkennung obsolet. Setzt man sie ein, produziert sie bei Opera-8-Benutzern falsche Resultate. Man kann nie wissen, ob ein Browser bestimmte Objekte irgendwann implementiert, und sei es auch nur zum Schein. Daher ist window.opera prinzipiell verlässlicher und ich halte es für unbegründet, anesichts der zu vernachlässigenden Benutzer-JavaScripts zu einer Alternativmethode zu raten.
Mathias