Eindeutige Browsererkennung möglichst ohne Useragent
Sven
- javascript
0 Sven Rautenberg0 molily0 Cheatah0 Cybaer0 Sven0 Ingo Turski0 Sven
0 Der Martin0 Cybaer
Moin,
folgendes habe ich mir schon zusammengebastelt:
var opera=false, msie=false, netscape=false, dhtml=false, badbrowser=false;
if(window.opera) opera = true;
if(document.all && !opera) msie = true;
if(document.layers && !opera) netscape = true;
if(!opera && !msie && !netscape) {
if(document.getElementById) dhtml = true;
else badbrowser = true; }
if(opera || msie) { // Start (Browser OK)
alert("wunderbar"); }
else if(netscape) { // NS 4
alert("igitt - ns4. hässlich *g*"); }
} else if(dhtml) {
alert("PROBLEMZONE");
} else if(badbrowser) {
alert("Schlechter komischer kleiner browser ;)"); }
Sozusagen. Das Problem liegt (selbstverständlich ;) in der Problemzone. Ich möchte möglichst nicht mit irgendwelchen Useragent's arbeiten, die ich mühselig mittels regex-pattern auseinandernehmen müsste, sondern nur eine schnelle und flexibele lösung, sodass auch in z.B. Mozilla ein alert("wunderbar"); erscheinen kann und ich diesen browser nicht den Nichtidentifizierbaren zuschreiben muss.
Vorschläge?
Gruß,
Sven
Moin!
Vorschläge?
Mach deine Signatur klein. 50% deines Gesamtpostings sind Signatur, das ist eindeutig zu groß.
- Sven Rautenberg
Moin Sven,
Vorschläge?
Mach deine Signatur klein. 50% deines Gesamtpostings sind Signatur, das ist eindeutig zu groß.
Ich habe jetzt bereits dran rumgeschraubt, und mittlerweile ist sie sogar ziemlich klein geworden.
reicht's dir?
Gruß,
sven
PS: wie wär's mit einer erweiterung des forenssystems auf einen hinweis, dass die signatur zu lang ist? *scnr*
Hallo Sven,
Mach deine Signatur klein. 50% deines Gesamtpostings sind Signatur, das ist eindeutig zu groß.
Ich habe jetzt bereits dran rumgeschraubt, und mittlerweile ist sie sogar ziemlich klein geworden.
reicht's dir?
Nein. Drei Zeilen, eher weniger, wenn's nicht grade gute Zitate sind. Natürlich völlig IMHO.
PS: wie wär's mit einer erweiterung des forenssystems auf einen hinweis, dass die signatur zu lang ist? *scnr*
*I* >;)
Grüße aus Barsinghausen,
Fabian
Moin Fabian,
Nein. Drei Zeilen, eher weniger, wenn's nicht grade gute Zitate sind. Natürlich völlig IMHO.
3 Zeilen bekommt man alleine schon mal durch den Selfcode und einen Decoder sowie einen encoder-link gefüllt.
Hinzu kommen jetzt ein paar zeilen extra, und zwar für noch genau *auf-uhr-schau* maximal 12 Stunden.
PS: wie wär's mit einer erweiterung des forenssystems auf einen hinweis, dass die signatur zu lang ist? *scnr*
*I* >;)
eigentlich gar keine so schlechte idee.
Gruß,
Sven
Hallo,
if(opera || msie) { // Start (Browser OK)
alert("wunderbar"); }
else if(netscape) { // NS 4
alert("igitt - ns4. hässlich *g*"); }
} else if(dhtml) {
Mozilla meldet einen Syntaxfehler in dieser Zeile. Schau dir die Verschachtelung an:
if (opera || msie) {
alert("wunderbar");
} else
if(netscape) {
alert("igitt - ns4. hässlich *g*");
}
} else if(dhtml) {
...
Die einzig mögliche Form ist jedoch if (...) {...} else {...}, nicht noch mehrere else {...} dahinter.
Wenn du wirklich darauf stehst, wäre eher eine solche Verschachtelung sinnig (absichtlich in der Langform):
if (opera || msie) {
alert("wunderbar");
} else {
if (netscape) {
alert("ns4");
} else {
if (dhtml) {
alert("PROBLEMZONE");
} else {
if (badbrowser) {
alert("sonstiger browser");
}
}
}
}
Bzw. du willst wohl auf folgendes hinaus:
if (opera || msie || dhtml) {
alert("wunderbar");
} else {
if (netscape) {
alert("ns4");
} else {
alert("badbrowser")
}
}
Sozusagen. Das Problem liegt (selbstverständlich ;) in der Problemzone.
Dort ist kein Problem.
Ich möchte möglichst nicht mit irgendwelchen Useragent's arbeiten, die ich mühselig mittels regex-pattern auseinandernehmen müsste
Wieso solltest du das auch? Selbst wenn, es wäre nicht nötig, weil es auch andere zuverlässigere Abfragen gibt, siehe http://www.lipfert-malik.de/webdesign/tutorial/bsp/browser_js_test.html.
sondern nur eine schnelle und flexibele lösung
Mit welchem Ziel? Das ist immer der zentrale Punkt bei jeglichen JavaScript-Browserweichen.
sodass auch in z.B. Mozilla ein alert("wunderbar"); erscheinen kann und ich diesen browser nicht den Nichtidentifizierbaren zuschreiben muss.
Im Mozilla ist dhtml==true, wenn du den Fehler beseitigst.
Welchen Zweck hat die Identifizierung? Konqueror wird z.B. als MSIE erkannt.
Mathias
Moin molily,
if(opera || msie) { // Start (Browser OK)
alert("wunderbar"); }
else if(netscape) { // NS 4
alert("igitt - ns4. hässlich *g*"); }
} else if(dhtml) {
Mozilla meldet einen Syntaxfehler in dieser Zeile. Schau dir die Verschachtelung an:
ja sorry, ich habe die laaangen dinge, die in den blocks anstelle von alert("...."); gestanden haben, eben durch alert() ersetzt, da scheinen mir ein paar { und } abhanden gekommen zu sein.
ich will auf
if()
....
else if()
...
else if()
...
else
...
hinaus.
Sozusagen. Das Problem liegt (selbstverständlich ;) in der Problemzone.
Dort ist kein Problem.
Das Problem ist, dass ich Mozilla nicht einwandfrei identifizieren kann. Also sagen kann: "guter browser, weiter so".
Ich möchte möglichst nicht mit irgendwelchen Useragent's arbeiten, die ich mühselig mittels regex-pattern auseinandernehmen müsste
Wieso solltest du das auch?
genau, es geht mir ja lediglich um die funktionen.
Selbst wenn, es wäre nicht nötig, weil es auch andere zuverlässigere Abfragen gibt, siehe http://www.lipfert-malik.de/webdesign/tutorial/bsp/browser_js_test.html.
danke, so was in der Art habe ich gesucht.
sondern nur eine schnelle und flexibele lösung
Mit welchem Ziel? Das ist immer der zentrale Punkt bei jeglichen JavaScript-Browserweichen.
ich habe das ding, das nach der browserabfrage "gestartet" wird (großes Javascript-gebilde ;-), mit mehrern Browsern getestet und bei einigen, wie z.B. NS4 oder NS6, Problemchen festgestellt. Auf diese will ich gerne hinweisen.
Browser wie Opera, IE oder Mozilla sollen nicht lesen müssen, dass ns4 evv. schwarze striche und dies und jenes darstellt.
sodass auch in z.B. Mozilla ein alert("wunderbar"); erscheinen kann und ich diesen browser nicht den Nichtidentifizierbaren zuschreiben muss.
Im Mozilla ist dhtml==true, wenn du den Fehler beseitigst.
ja, das ist klar. Nur wird eben dann ausgegeben, dass der Browser nicht einwandfrei identifiziert werden konnte und es daher probleme mit der "Applikation" geben könnte. Und mit Mozilla gibt es keine Probleme. kein wunder, ist ja auch mozilla :)
Welchen Zweck hat die Identifizierung? Konqueror wird z.B. als MSIE erkannt.
ja!? Aber er verhält sich doch nicht wie der IE, oder?
Gruß,
Sven
Hallo,
ich habe das ding, das nach der browserabfrage "gestartet" wird (großes Javascript-gebilde ;-), mit mehrern Browsern getestet und bei einigen, wie z.B. NS4 oder NS6, Problemchen festgestellt. Auf diese will ich gerne hinweisen.
Browser wie Opera, IE oder Mozilla sollen nicht lesen müssen, dass ns4 evv. schwarze striche und dies und jenes darstellt.
Wenn es nur um solche Sachen geht, dann reicht ein punktuelles if (document.layers). Darüber hinaus wären CSS-Weichen denkbar, die bspw. ein bestimmtes Element mit dem Hinweis nur für Netscape 4 zeigen (es gibt ebenso zuverlässige CSS-Weichen).
ja, das ist klar. Nur wird eben dann ausgegeben, dass der Browser nicht einwandfrei identifiziert werden konnte und es daher probleme mit der "Applikation" geben könnte.
Wie gesagt, frage die Methoden/Eigenschaften ab, mit denen es Probleme gibt. Wenn nicht direkt über JavaScript-Abfragen der verwendeten Objekte feststellbar ist, ob der Fehler auftritt, weil es sich wie du andeutetest um CSS-Darstellungsfehler geht, dann ist Heuristik notwendig (siehe Link).
Welchen Zweck hat die Identifizierung? Konqueror wird z.B. als MSIE erkannt.
ja!? Aber er verhält sich doch nicht wie der IE, oder?
In Bezug auf was? In Bezug auf document.all? Ja. Die gängigen Zugriffe mit document.all auf Elemente mit IDs kann Konqueror (window['ID'], document.all.ID, document.all('ID'), document.all['ID'], document.all.namedItem('ID')), ebenso document.all.tags(...).
Mathias
Moin molily,
ich habe das ding, das nach der browserabfrage "gestartet" wird (großes Javascript-gebilde ;-), mit mehrern Browsern getestet und bei einigen, wie z.B. NS4 oder NS6, Problemchen festgestellt. Auf diese will ich gerne hinweisen.
Browser wie Opera, IE oder Mozilla sollen nicht lesen müssen, dass ns4 evv. schwarze striche und dies und jenes darstellt.
Wenn es nur um solche Sachen geht, dann reicht ein punktuelles if (document.layers).
eigentlich ganz richtig. ich habe ja auch in meinem script
...
if(document.layers) netscape = true;
...
und später
if(netscape)
.....
geschrieben.
Darüber hinaus wären CSS-Weichen denkbar, die bspw. ein bestimmtes Element mit dem Hinweis nur für Netscape 4 zeigen (es gibt ebenso zuverlässige CSS-Weichen).
ja. Aber das ganze ding ist sooo komplex, dass es das ganze nur noch umständlicher machen würde und vor allem ist ehrlichgesagt auch kein platz dafür da ;-)
Da das ganze aber sowieso auf JavaScript beruht, sehe ich da kein problem. Funktioniert jetzt alles wunderbar:
<script language="JavaScript">
var opera = false, msie = false, netscape = false, moz = false, dhtml = false, badbrowser = false;
function chk()
{
if(window.opera) opera = true;
if(document.all && !opera) msie = true;
if(document.layers && !opera) netscape = true;
if(window.pkcs11) moz = true;
if(!opera && !msie && !netscape && !moz)
{
if(document.getElementById) dhtml = true;
else badbrowser = true;
}
if(netscape)
{ // NS 4
alert("Du benutzt Netscape 4\nDas System ist für modernere Browser gedacht, wurde jedoch erfolgreich mit diesem Browser getestet");
c = confirm("Es wird jedoch recht ungemütlich, eigentlich ist ein neuerer Browser zu empfehlen.\nWillst du trotzdem mit dem Netscape4 chatten?");
if(c)
alert("Viel Spaß beim Ausprobieren. Funktionalität des Systems nicht gewährleistet.");
}
else if(dhtml)
alert("Dein Browser konnte nicht einwandfrei identifiziert werden.\nEr scheint jedoch alle erforderlichen Techniken zu unterstützen.");
else if(badbrowser)
{
alert("Dein Browser konnte nicht identifiziert werden.\nDie benötigten Techniken werden von deinem Browser nicht unterstützt.\nDas System wird _nicht_ geladen.");
return;
}
location.href = "main.start.php";
}
//-->
</script>
ist ja auch nicht weiter bedeutungsvoll. Es ging mir hier lediglich um das "window.pkcs11", mit dem ich Mozilla aus der breiten Masse (?) der allgemeinen "akzeptabelen" Browser (dhtml = true-Browser) rausheben kann.
ja, das ist klar. Nur wird eben dann ausgegeben, dass der Browser nicht einwandfrei identifiziert werden konnte und es daher probleme mit der "Applikation" geben könnte.
Wie gesagt, frage die Methoden/Eigenschaften ab, mit denen es Probleme gibt.
- modernes CSS
- komplizierte Scripts (ereignisüberwachung, usw. halt)
das ist eine ganze reihe, praktisch alles, was ein moderner Browser im Gegensatz zu einem alten bietet.
Welchen Zweck hat die Identifizierung? Konqueror wird z.B. als MSIE erkannt.
ja!? Aber er verhält sich doch nicht wie der IE, oder?
In Bezug auf was? In Bezug auf document.all? Ja. Die gängigen Zugriffe mit document.all auf Elemente mit IDs kann Konqueror (window['ID'], document.all.ID, document.all('ID'), document.all['ID'], document.all.namedItem('ID')), ebenso document.all.tags(...).
na dann - kein problem. Er wird als IE identifiziert und verhält sich auch entsprechend.
Gruß,
Sven
Hi,
var opera=false, msie=false, netscape=false, dhtml=false, badbrowser=false;
Dich interessiert nicht, welchen Namen der Browser haben mag. Dich interessiert, was er _kann_. Also untersuche entsprechend. Mache dabei von typeof() Gebrauch, um Warnings zu vermeiden.
Cheatah
Hi,
Mache dabei von typeof() Gebrauch, um Warnings zu vermeiden.
Und um jegliche Warnings zu vermeiden, bedenke, daß typeof() nicht von jedem Browser unterstützt wird. ;-)
Gruß, Cybaer
Moin Cheatah,
var opera=false, msie=false, netscape=false, dhtml=false, badbrowser=false;
Dich interessiert nicht, welchen Namen der Browser haben mag. Dich interessiert, was er _kann_.
genau. DOM-Standart und so ein Zeugs soll schon drin sein. Ich habe diese paar var's jetzt um "moz" erweitert und es funktioniert wunderbar. Alle modernen browser, die "was können", dürfen durch [auch ns4! ;o) - mit dem funktioniert das alles nämlich (fast) auch :)], nur die "badbrowser" müssen draußen bleiben ;)
Gruß,
Sven
Hi,
nur die "badbrowser" müssen draußen bleiben ;)
auch mein IE6, in dem ich Javascript deaktiviert habe?
freundliche Grüße
Ingo
Moin Ingo,
nur die "badbrowser" müssen draußen bleiben ;)
auch mein IE6, in dem ich Javascript deaktiviert habe?
ja! Denn wie bereits geschildert ist dies ein kleiner "ist-browser-fähig"-Test für eine mehr oder weniger komplexe DHTML-"Anwendung". Und Browser, die sowieso kein JavaScript interpretieren (auch, wenn es deaktiviert ist), sollen erst recht draußen bleiben.
Die werden aber mittels einem <noscript>-Bereich, den dein IE6 sicherlich anzeigen würde, darauf hingewiesen werden :)
Grüße,
Sven
Hallo Sven,
nur gut dass du *nicht* auf die grelle Idee kommst, den User Agent auszuwerten. Den kann man schließlich bei vielen Browsern je nach Wunsch einstellen. Ich bezweifle zum Beispiel, dass dir die Angabe "Generic Browser", die du bei mir dann finden würdest, sehr viel weiterhilft... ;)
*scnr*
Martin
Hi,
Vorschläge?
Frage in JavaScript immer auf das Vorhandensein der zu benutzenden Eigenschaft ab (z.B. document.getElementById()), nicht auf den Browser!
Letzteres ist nur selten sinnvoll (z.B. für statistische Zwecke).
Meine "Browser-Erkennung": http://Coding.vampirehost.de/Systemvariable
Gruß, Cybaer