Sven: Eindeutige Browsererkennung möglichst ohne Useragent

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

--
     +--------------------------------------------+
     | Ferien! in Kürze bin ich weg für mehrere   |
     | Wochen weg :/                              |
     | Man sieht mich spätestens am 30. August    |
     | wieder :)                                  |
     | Und am 4.September dürfen die "Sven"'s dann|
     | ihren Namenstag feiern ;)                  |
 +---+                                            +---+
 |     Schöne Zeit wünsche ich allen hier im Forum,   |
 |                                                    |
 |  Sven - sommerferien04.20.wauwau@spamgourmet.org |
 +----------------------------------------------------+
 +----------------------------------------------------+
 |SELFcode:                                           |
 |  ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}
 |ENcode:                                             |
 |  http://forum.de.selfhtml.org/cgi-bin/selfcode.pl
 |DEcode:                                             |
 |  http://peter.in-berlin.de/projekte/selfcode/
 +----------------------------------------------------+
  1. Moin!

    Vorschläge?

    Mach deine Signatur klein. 50% deines Gesamtpostings sind Signatur, das ist eindeutig zu groß.

    - Sven Rautenberg

    1. 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*

      --
        TERMine: * 28.07.2004 - max. 30.08.2004 derSven ist weg :/ (wie schade ;-)
                 * 04.08.2004 Namenstage für die "Sven"'s im Forum (scnr)
        MAIL@me: Die Abwesenheitsmail:
                 mailto:sommerferien04.20.wauwau@spamgourmet.org
       SELFcode: ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}
         ENcode: http://forum.de.selfhtml.org/cgi-bin/selfcode.pl
         DEcode: http://peter.in-berlin.de/projekte/selfcode/
      1. 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

        1. 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

          --
            TERMine: * 28.07.2004 - max. 30.08.2004
                       derSven ist weg :/ (wie schade ;-)
                     * 04.08.2004
                       Namenstage für die "Sven"'s im Forum (scnr)
            MAIL@me: Die Abwesenheitsmail:
                     mailto:sommerferien04.20.wauwau@spamgourmet.org
           SELFcode: ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}
             ENcode: http://forum.de.selfhtml.org/cgi-bin/selfcode.pl
             DEcode: http://peter.in-berlin.de/projekte/selfcode/
  2. 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

    1. 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

      --
        TERMine: * 28.07.2004 - max. 30.08.2004
                   derSven ist weg :/ (wie schade ;-)
                 * 04.08.2004
                   Namenstage für die "Sven"'s im Forum (scnr)
        MAIL@me: Die Abwesenheitsmail:
                 mailto:sommerferien04.20.wauwau@spamgourmet.org
       SELFcode: ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}
         ENcode: http://forum.de.selfhtml.org/cgi-bin/selfcode.pl
         DEcode: http://peter.in-berlin.de/projekte/selfcode/
      1. 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

        1. 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

          --
            TERMine: * 28.07.2004 - max. 30.08.2004
                       derSven ist weg :/ (wie schade ;-)
                     * 04.08.2004
                       Namenstage für die "Sven"'s im Forum (scnr)
            MAIL@me: Die Abwesenheitsmail:
                     mailto:sommerferien04.20.wauwau@spamgourmet.org
           SELFcode: ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}
             ENcode: http://forum.de.selfhtml.org/cgi-bin/selfcode.pl
             DEcode: http://peter.in-berlin.de/projekte/selfcode/
  3. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    2. 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

      --
        TERMine: * 28.07.2004 - max. 30.08.2004
                   derSven ist weg :/ (wie schade ;-)
                 * 04.08.2004
                   Namenstage für die "Sven"'s im Forum (scnr)
        MAIL@me: Die Abwesenheitsmail:
                 mailto:sommerferien04.20.wauwau@spamgourmet.org
       SELFcode: ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}
         ENcode: http://forum.de.selfhtml.org/cgi-bin/selfcode.pl
         DEcode: http://peter.in-berlin.de/projekte/selfcode/
      1. Hi,

        nur die "badbrowser" müssen draußen bleiben ;)

        auch mein IE6, in dem ich Javascript deaktiviert habe?

        freundliche Grüße
        Ingo

        1. 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

          --
            TERMine: * 28.07.2004 - max. 30.08.2004 ** potentielle Abwesenheitsgefahr
                     * 04.08.2004                   ** Namenstage für die "Sven"'s im Forum (scnr)
            MAIL@me: Die Abwesenheitsmail:  mailto:sommerferien04.20.wauwau@spamgourmet.org
           SELFcode: ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}
  4. 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

  5. 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

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!