browserweiche
seelöwe
- php
hallo leute!
ich wüßte mal gerne wie eine browserweiche mit php aussieht. die weiche sollte netscape4.x browser nach style_nn4.css schicken und alle anderen nach style.css. kann mir jemand dazu eine kompetente antwort liefern?
gruß vom seelöwen!
Hallo seelöwe,
die Variable $HTTP_USER_AGENT liefert Dir Infos zum Browser, z.B. "Mozilla/5.0 (Windows; U; Windows NT 5.0; de-AT; rv:1.0.0) Gecko/20020530". Jetzt müsstest Due ben nur noch die Bezeichnungen der Browser heraussuchen und per if-Abfrage drauf reagieren.
Grüße aus Würzburg
Julian
P.S: Was willst Du bitte mit "kompetente antwort liefern" sagen?
P.S: Was willst Du bitte mit "kompetente antwort liefern" sagen?
damit meine ich das ich nicht solche antworten lesen möchte wie du sie mir letzte nacht im bezug auf positionierung innerhalb von tabellenzellen gegeben hast!
wenn du schon der ansicht bist das du dich in den selfhtml seiten gut auszukennen, solltest du auch wissen das die version 8.x etwas in der übersichtlichkeit zu wünschen übrig lässt. zumindest für jemanden der nicht jeden tag darin liest! die antwort: style=relative wäre aöso in deinem fall kompetent gewesen, die du gegeben hast, hat lediglich ein schlechtes licht auf dich geworfen!
gruß vom seelöwen!
Hallo seelöwe,
SelfHTML habe ich auch weder auswendig gelernt, noch habe ich es bisher von vorn bis hinten durchgelesen. Es liegt aber doch nahe, dass man bei fehlender Orientierung entweder mal eine der Suchen nutzt, oder - wie ich hingekommen bin - im Stichwortverzeichnis nachschlägt. Und wie durch ein Wunder tauscht dort der Begriff "Positionierung" sogar auf.
Wenn ich jetzt noch eine Stelle der Forumshauptdatei ("Es wird erwartet, daß bei Problemen erst einmal in SELFHTML, (...) nach einer Lösung gesucht wird.") mit heranziehe, dann finde ich ein Posting mit Verweis auf SelfHTML keineswegs inkompetent (oder hältst Du SelfHTML dafür?).
Grüße aus Würzburg
Julian
Hallo Seelöwe,
Du musst $HTTP_USER_AGENT, das ist der Identifikationsstring, der vom Browser geschickt wird, nach irgendwelchen charakteristischen Zeichenfolgen durchsuchen. Um z.B den IE zu erkennen, und ein spezielles Stylesheet einzubinden, geht das ungefähr so:
<?
if(strstr($HTTP_USER_AGENT, "MSIE"))
{
$browser="ie";
}else
{
$browser="ns";
}
?>
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet_<? echo $browser; ?>.css">
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.
Viele Grüße
Stephan
hallo stephan,
vielen dank für deine schnelle und ausreichende antwort. ich werde mich jetzt mal losmachen und auf der seite die du gelinkt hast versuchen mit meinem english durchzusteigen.
viele grüße vom seelöwen
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
hi
<?
if(strstr($HTTP_USER_AGENT, "MSIE"))
{
$browser="ie";
}else
{
$browser="ns";
}
?>
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet_<? echo $browser; ?>.css">
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.
grandios, wirklich! Zum einen hast du mit dem Verhalten einen TechEvang-Bug in Bugzilla sicher, zum anderen kann man gar nicht sicherer über falsche Browser-IDs stolpern - da tut's ja schon Opera's Pseudo-Fake, den man mit 'nem Klick in der Statusleiste aktiviert...
Wenn du schon ünbedigt über den Useragent gehen willst [was fast unmöglich ist, da Netscape 4 (um den es hier ja eigentlich geht) kein eindeutiges "Stichwort" da drin hat, im Gegensatz zu den meisten anderen...] dann so:
if(strstr($HTTP_USER_AGENT, "Netscape"))
{
if(!strstr($HTTP_USER_AGENT, "Gecko") && (!strstr($HTTP_USER_AGENT, "Opera"))
{
$browser="nn4";
}
}
<link rel="stylesheet" type="text/css" href="style_<? echo $browser; ?>.css">
..womit dann auch die Variablennamen zur eigentlichen Frage passen. Das ganze da oben geht jetzt nur noch schief, wenn jemand einem Browser wirklich die komplette Netscape4-dent mitgibt. Trotz allem ist die reine CSS-Lösung immer noch 100mal zuverlässiger.
Grüße aus Bleckede
Kai
Hallo Kai,
grandios, wirklich!
<sarkasmus>
Danke, das sind doch immer wieder die netten, niemals herabsetzenden oder beleidigenden Reaktionen, die das Antworten hier zum Vergnügen machen
</sarkasmus>
Zum einen hast du mit dem Verhalten einen TechEvang-Bug in Bugzilla sicher, zum anderen kann man gar nicht sicherer über falsche Browser-IDs stolpern - da tut's ja schon Opera's Pseudo-Fake, den man mit 'nem Klick in der Statusleiste aktiviert...
Ich hatte "z.B." geschrieben, und in keiner Weise impliziert, daß dieses BEISPIEL gefakte User-Agents, Mozilla, Opera oder sonstwas erkennt, oder daß es ohne triviale Änderungen von Variablennamen anwendbar ist.
Ansonsten: <?m=95181&t=16969>
Viele Grüße
Stephan
hi
Ich hatte "z.B." geschrieben, und in keiner Weise impliziert, daß dieses BEISPIEL gefakte User-Agents, Mozilla, Opera oder sonstwas erkennt, oder daß es ohne triviale Änderungen von Variablennamen anwendbar ist.
genaugenommen verfehlt dein Code da die Anforderung zu 100%, die ja eindeutig lautete Netscape 4 eine andere Datei als allen anderen zu geben. Folglich geht es überhaupt nicht (!) um den IE, wenn man den Useragent als Grundlage nimmt, ist vielmehr dieser mit Abstand am schwersten "ausversehen" zu erwischen.
Was mich konkrent daran so ärgert ist, dass es immer wieder vorkommt, dass solche Lösungen dann übernommen werden und das Mozilla TechEvang-Team später herausfinden muss, wieso hier etwas schiefgeht. Da aber alles Serverseitig abläuft sieht man nur, dass man eine Datei serviert bekommt, die man gar nicht haben will. Microsoft's fremd-Browser-Schlechtmach-Scripte arbeiten übrigens genauso, wenn man da in Mozilla den Useragent vom MSIE übernimmt passt alles.
Grüße aus Bleckede
kai
Moin!
ich wüßte mal gerne wie eine browserweiche mit php aussieht. die weiche sollte netscape4.x browser nach style_nn4.css schicken und alle anderen nach style.css. kann mir jemand dazu eine kompetente antwort liefern?
Die Antwort lautet: Sowas gibt es nicht. PHP agiert serverseitig, es kriegt absolut keine gesicherten Informationen darüber, welcher User-Agent wirklich verwendet wird (die Angaben im HTTP-Header können gelogen und/oder kreativ ausgedacht sein) - folglich kann man mit PHP zwar etwas rumraten, aber niemals sicher sein.
Wenn du eine Browserweiche erstellen willst, benutze dazu clientseitige Techniken. Wahlweise kannst du mit Javascript gewisse Browsermerkmale abfragen und basierend darauf entscheiden (ganz gut geeignet für grundlegende Unterscheidungen ist die Abfrage auf document.layers/document.all/document.getElementById), oder du nutzt für CSS gewisse Unfähigkeiten alter Browser aus, um ungefährliche Stylesheets einzubinden, wenn z.B. Netscape 4 verwendet wird, und das volle Programm bei allen anderen Browsern (vgl. http://aktuell.de.selfhtml.org/tippstricks/css/browserweiche/index.htm).
- Sven Rautenberg
moin sven!
das, dass mit js auch geht ist mir natürlich auch nicht entgangen von 100 prozentiger sicherheit kann aber bei js auch nicht die rede sein. weil man js ja deaktivieren kann!
thx für deine antwort!
gruß vom seelöwen
hi
das, dass mit js auch geht ist mir natürlich auch nicht entgangen von 100 prozentiger sicherheit kann aber bei js auch nicht die rede sein. weil man js ja deaktivieren kann!
korrekt. Die Diskussion ist allerdings müßig, weil Netscape 4 ohne JS auch kein CSS hat.
Grüße aus Bleckede
Kai
Moin!
das, dass mit js auch geht ist mir natürlich auch nicht entgangen von 100 prozentiger sicherheit kann aber bei js auch nicht die rede sein. weil man js ja deaktivieren kann!
Das ist richtig, aber irrelevant. Weil:
Wenn es um das browserabhängige Einbinden von CSS geht, funktioniert die Browserweiche in den Tipps&Tricks vollkommen ohne Javascript.
Und wenn es um Javascript-Code geht (der häufigste Anwendungsfall dafür dürfte das Anzeigen und Verstecken von <div>-Layern sein), dann ist mit Javascript die Unterscheidung möglich, und ohne Javascript braucht man keine Unterscheidung, weil man sich sowieso was anderes ausdenken muß als Alternative.
Wenn bei Netscape 4 Javascript ausgeschaltet ist, brauchst du dich übrigens um die korrekte Einbindung von CSS auch nicht mehr zu kümmern - das ist dann ebenfalls deaktiviert.
Die Frage ist bei solchen Aktionen immer: Was soll erreicht werden? Erst mit dieser Information kann man sinnvolle Antworten geben. Es dürfte dir aber doch einleuchten, daß eine Browserweiche für CSS am sinnvollsten mit CSS realisiert werden sollte, und eine Browserweiche für DOM-Unterschiede in Javascript am besten mit Javascript.
Wenn du mit PHP dabeigehst, dann besteht immer die Gefahr, daß ein Browser etwas vorgesetzt kriegt, was er nicht verkraftet, weil PHP zu falschen Ergebnissen gekommen ist (die daraus resultieren, daß _du_ falsche Annahmen über Wenn-Dann-Verhältnisse getroffen hast).
- Sven Rautenberg
hallo sven,
ist ja mal interessantes am sonntag! dann meinst du also wenn ein script wie dieses:
<script language="JavaScript"><!--
style_nn = "css/style_nn.css";
style_other = "css/style.css";
if(document.layers)
{
document.write("<link rel='stylesheet' href='" + style_nn + "' type='text/css'>");
}
else
{
document.write("<link rel='stylesheet' href='" + style_other + "' type='text/css'>");
}
//--></script>
einbaue wäre ich fast immer auf der richtigen seite?
gruß vom seelöwe
Yo!
ist ja mal interessantes am sonntag! dann meinst du also wenn ein script wie dieses:
<script language="JavaScript"><!--
style_nn = "css/style_nn.css";
style_other = "css/style.css";
if(document.layers)
{
document.write("<link rel='stylesheet' href='" + style_nn + "' type='text/css'>");
}
else
{
document.write("<link rel='stylesheet' href='" + style_other + "' type='text/css'>");
}
//--></script>
einbaue wäre ich fast immer auf der richtigen seite?
Genau (sofern dein Ziel ist, Netscape 4 von gewissen CSS-Angaben auszuschließen). Und wenn du noch
<noscript>
<link rel="stylesheet" href="css/style.css" type="text/css">
</noscript>
einfügst, dann kriegen alle Browser ohne Javascript ebenfalls eine CSS-Datei. Das ist zwar die für "andere Browser", aber ohne Javascript kann der Netscape ja ohnehin kein CSS, er wird folglich auch keine Fehldarstellungen produzieren.
Besser ist hingegen (aber wirklich rein subjektiv), wenn du die Browserweiche für Netscape 4 aus den Tipps&Tricks benutzt. URL hatte ich angegeben.
- Sven Rautenberg
Hallo Swen,
Die Antwort lautet: Sowas gibt es nicht. PHP agiert serverseitig, es kriegt absolut keine gesicherten Informationen darüber, welcher User-Agent wirklich verwendet wird (die Angaben im HTTP-Header können gelogen und/oder kreativ ausgedacht sein) - folglich kann man mit PHP zwar etwas rumraten, aber niemals sicher sein.
Absolute Sicherhiet ist immer schwer, aber die Leute, die mit falschen User-Agent-Strings surfen, sind nicht gerade zahlreich, da es eigentlich keinen guten Grund dafür gibt. Das machen eigentlich wohl nur Webdesigner, und nachdem das auch nicht mit allen Browsern geht, ist man wohl auf der sicheren Seite, wenn man denen das CSS für Mozilla gibt. (Falls Sie mit Fantasienamen surfen. Wenn Sie unbedingt so tun wollen, als surften sie z.B. mit NS4, dann bekommen Sie in Gottesnamen halt auch die Seite für diesen Browser, irgendwie will in diesem Fall bei mir nicht das Gefühl aufkommen, daß ich einen armen, unschuldigen Surfer ausgesperrt habe.)
Oder:
Wer User-Agent-Strings nachmacht oder verfälscht, oder sich nachgemachte oder verfälschte verschafft und in Umlauf bringt, wird mit CSS ohne besondere Anpassung bestraft.
;-)
Viele Grüße
Stephan
Hallo Stephan,
Absolute Sicherhiet ist immer schwer, aber die Leute, die mit falschen
User-Agent-Strings surfen, sind nicht gerade zahlreich,
Woher weisst du das?
Tatsache sind, dass es mindestens schonmal 250 sind. Bei uns in der Firma wird
das Feld ueberschrieben durch ein "Das geht dich gar nix an".
da es eigentlich keinen guten Grund dafür gibt.
Das magst du so sehen. Ich z. B. sehe das ganz anders.
Das machen eigentlich wohl nur Webdesigner, und nachdem das auch nicht mit
allen Browsern geht,
Natuerlich geht das mit allen Browsern. Das hat mit den Browsern naemlich rein
gar nix zu tun.
Gruesse,
CK
Hi,
die Leute, die mit falschen User-Agent-Strings
surfen, sind nicht gerade zahlreich, da es
eigentlich keinen guten Grund dafür gibt.
akzeptierst Du als Grund "Befehl der Geschäftsleitung
zur Umsetzung des beschlossenen Sicherheitskonzepts"?
Das machen eigentlich wohl nur Webdesigner, und
nachdem das auch nicht mit allen Browsern geht,
Das findet überhaupt nicht im Browser statt.
Wenn Du wüßtest, wie viele Rechner zwischen Browser
und Server in der Lage sind, HTTP-Header zu filtern
bzw. umzuschreiben (Proxies, Firewalls, ...), würdest
Du Deine Erwartungshaltung sicherlich abändern.
Viele Grüße
Michael
(der letzte Woche einem Besucher seiner Homepage
erklären durfte, daß dessen PC-Personal-Firewall be-
stimmte HTTP-Header nicht etwa entfernte, sondern mit
"XXX" überschrieb ... leider war auch "Accept-Encoding"
dabei, gnlpfts ...)
hi
(der letzte Woche einem Besucher seiner Homepage
erklären durfte, daß dessen PC-Personal-Firewall be-
stimmte HTTP-Header nicht etwa entfernte, sondern mit
"XXX" überschrieb ... leider war auch "Accept-Encoding"
dabei, gnlpfts ...)
dieses programm dürfte es dann geschickt schaffen jeden Browser zu 90% außer Funktion zu setzen - echte glanzleistung ;)
Grüße aus Bleckede
Kai