Sven Rautenberg: browserweiche

Beitrag lesen

Moin!

<?
if(strstr($HTTP_USER_AGENT, "MSIE"))
{
$browser="ie";
}else
{
$browser="ns";
}
?>
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet_<? echo $browser; ?>.css">

Dieses Verfahren ist nicht empfehlenswert, weil extrem fehleranfällig. Der Server _weiß_ einfach nichts über den Browser, er vermutet lediglich anhand der gegebenen Informationen.

Die Möglichkeiten, dem Server falsche Angaben zu präsentieren, sind einfach zu vielfältig und verbreitet. Beispiele gefällig?

Opera kann sich als IE 5, Netscape 4.78 oder Netscape 3 ausgeben.

Webwasher (und viele andere Proxys) erlaubt es, den User-Agent vollkommen selbst zu definieren.

Es gibt viel mehr Browser auf der Welt, die mit standardgemäßem CSS und Javascript zurecht kommen und zurechtkommen werden, als man _heute_ Browserweichen schreiben könnte. Das letzte schreckliche Debakel der User-Agent-orientierten Browserweichen war, als Netscape 6 herauskam. Der war natürlich ein navigator.appName=="Netscape" und navigator.appVersion>=4, nur leider kann er kein document.layers mehr, was viele Webseiten außer Gefecht setzte.

Deshalb nochmal in deutlich: Das prüfen von beliebigen Textaussagen eines Browsers über sich selbst ist Blödsinn. Vor allem, wenn diese Aussagen verändert werden können oder einfach nicht zukunftsgerichtet interpretiert werden.

Wenn Du auch noch NS4 von Mozilla unterscheiden willst, schau' Dir mal z.B. http://www.webmasterbase.com/article/619 an, da ist ein Beispiel, das fast alle IE/NS-Versionen unterscheidet.

Dieser Artikel ist genauso schrecklich. Er erkennt einen echten Opera nicht, und viele andere nicht weit verbreitete Browser wie Konqueror und Galeon werden eventuell als Mozilla behandl - diese Browser sind aber durchaus mit Netscape 6 und IE ebenbürtig, was die Unterstützung aktueller Technologien angeht. Was passiert, wenn diese Browser benutzt werden?

Die einzige sinnvolle Maßnahme im Kampf gegen die verschiedenen Browser: Kompatibilität und sowenig Unterschiede, wie möglich. Es gibt absolut keinen Grund, nach Browser_namen_ zu unterscheiden. Die Unterscheidung nach Javascript-Objekten hingegen (document.layers/all/getElementById) ist sinnvoll und notwendig.

- Sven Rautenberg