Alex: Browsercheck nicht ganz klar

Hallo,
ich versuche die ganze zeit etwas zu verstehen:

system= (navigator.appVersion.indexOf("Mac")==-1)?"PC":"MAC";
browser=(navigator.appName.indexOf("Microsoft")==-1)?"NS":"IE";
systembrowser=system+ browser;

Mit indexOf prüfe ich normalerweise doch Zeichen oder? Ich verstehe nicht ganz warum mir indexOf bei der Browsererkennung hilft.

Auch ein Rätsel ist für mich die -1 ( Das kommt immer wieder vor)
und was macht ?"PC":"Mac";

Wäre toll, wenn mir das einer erklärt.
Danke

  1. system= (navigator.appVersion.indexOf("Mac")==-1)?"PC":"MAC";
    browser=(navigator.appName.indexOf("Microsoft")==-1)?"NS":"IE";
    systembrowser=system+ browser;

    Mit indexOf prüfe ich normalerweise doch Zeichen oder? Ich verstehe nicht ganz warum mir indexOf bei der Browsererkennung hilft.

    indexOf prüft auf gewisse Zeichen in einem String und gibt deren Position zurück. Sind die gesuchten Zeichen nicht vorhanden, so lautet die Rückgabe -1.

    Wenn in der appVersion die Zeichenfolge "Mac" nicht vorkommt, dann wird der Variablen system der Wert "PC" zugewiesen, andernfalls "MAC". Analog für appName.
    Die Schreibweise mit dem ? : ist eine Kruzform für die if-Abfrage.

    Auch ein Rätsel ist für mich die -1 ( Das kommt immer wieder vor)
    und was macht ?"PC":"Mac";

    Wäre toll, wenn mir das einer erklärt.

    Hoffe es war verständlich.

    Danke

    Bitte,
    Jürgen

    1. Yep, das war schnell und sehr informativ.
      Ich habs geschnallt. Danke :o)

  2. hi,

    browser=(navigator.appName.indexOf("Microsoft")==-1)?"NS":"IE";

    hier wird allerdings lediglich geprueft, ob "Microsoft" enthalten ist, und, falls nicht, davon ausgegangen, dass es ein Netscape ist. Solche Abfragen sind nicht wirklich hilfreich, da sie wenig ueber die _Faehigkeit_ des Browsers aussagen. Ausserdem haben NC 6/7 und NC 4x nix miteinander gemein. (Gleiches gilt fuer die Mac-Abfrage, denn !Mac kann schliesslich auch Linux sein.)
    Bewaehrt hat sich da eher eine Abfrage der bekannten Objekte, um entweder bestimmte Methoden auszufuehren, oder den Browser zu identifizieren. Das kann dann so aussehen, und beliebig erweitert werden:

    // some known objects
    var nc      =  !!(document.captureEvents  && !document.getElementById);
    var nc6     =  !!(document.captureEvents  &&  document.documentElement);
    var opera   =  !!(document.getElementById && !document.documentElement);
    var ie      =  !!document.all;
    var ie4     =  !!(document.all            && !document.documentElement);
    var ie5     =  !!(document.all            &&  document.documentElement);
    var dom     =  !!document.getElementById;
    var mac     =  !!(navigator.userAgent.indexOf("Mac")!=-1);

    teste das mal mit alert() und verschiedenen Browsern durch.

    Gruesse  Joachim

    1. hi

      var mac     =  !!(navigator.userAgent.indexOf("Mac")!=-1);

      solch eine Abfrage ist heute praktisch überflüssig. Das kam aus zeiten, als die Browser noch bei den Schriftgrößen stur die Systemeigene DPI-Zahl verwendet haben - bei Windows 96dpi, beim Mac und Linux 75dpi. Heute Arbeiten z.B. Linux-Systeme idr. mit 100dpi und ein Browser soll (so steht es in der CSS2 Spezifikation und klappt auch meistens) immer von 96dpi ausgehen.

      Grüße aus Bleckede

      Kai

      1. hi

        var mac     =  !!(navigator.userAgent.indexOf("Mac")!=-1);

        solch eine Abfrage ist heute praktisch überflüssig.

        wenn Du wuesstest wie viele Macianer noch good old NC 4x verwenden...

        Gruesse  Joachim

        1. hi

          var mac     =  !!(navigator.userAgent.indexOf("Mac")!=-1);

          solch eine Abfrage ist heute praktisch überflüssig.

          wenn Du wuesstest wie viele Macianer noch good old NC 4x verwenden...

          Egal. Entweder verwendet man als Schriftgröße Pixelangaben (die sind von den DPI vollkommen unabhängig), oder relative Angaben (dann sind die DPI auch irrelevant). Lediglich bei der Längenangabe Punkt (pt) und allen anderen Maßangaben (mm, cm, inch,...) sind die DPI-Angaben relevant und werden zur Umrechnung von Längenangaben in Pixel herangezogen. Leider gibts auf allen Systemen (nicht nur Mac, sondern auch Windows und Linux) die Möglichkeit, die DPI-Angabe von annähernd 0 DPI bis weit über 200 DPI zu verstellen. Neue Mac-Browser verwenden übrigend 96 dpi als Defaultwert, obwohl das MacOS nur von 72 dpi ausgeht - eben weil viele Webseiten als Windows-Seiten ausgelegt sind und mit pt als Schriftgröße arbeiten. Irgendwann waren es die Browserbenutzer wohl leid, immer zu kleine Schriftarten zu sehen.

          Insofern ist es nicht notwendig, den Mac gesondert zu erkennen, weil es absolut nichts bringt.

          - Sven Rautenberg

          1. hi

            Neue Mac-Browser verwenden übrigend 96 dpi als Defaultwert, obwohl das MacOS nur von 72 dpi ausgeht - eben weil viele Webseiten als Windows-Seiten ausgelegt sind und mit pt als Schriftgröße arbeiten. Irgendwann waren es die Browserbenutzer wohl leid, immer zu kleine Schriftarten zu sehen.

            nein, die Problemlösung kommt vom W3C. In der CSS2.0 Spec wird empfohlen von 90dpi auszugehen, in 2.1 von (realistischeren) 96dpi.

            Grüße aus Bleckede

            Kai

            1. Aloha!

              Neue Mac-Browser verwenden übrigend 96 dpi als Defaultwert, obwohl das MacOS nur von 72 dpi ausgeht - eben weil viele Webseiten als Windows-Seiten ausgelegt sind und mit pt als Schriftgröße arbeiten. Irgendwann waren es die Browserbenutzer wohl leid, immer zu kleine Schriftarten zu sehen.

              nein, die Problemlösung kommt vom W3C. In der CSS2.0 Spec wird empfohlen von 90dpi auszugehen, in 2.1 von (realistischeren) 96dpi.

              Empfehlungen sind keine Verpflichtungen, und die Mac-Browser erlauben es auch wieder, jeden beliebigen DPI-Wert einzustellen, IIRC. Das ist also auch keine Problemlösung.

              Abgesehen davon ist es durchaus sinnvoll, eine der Realität sehr nahekommende DPI-Zahl einzustellen, denn nur dann kann man auf dem Bildschirm wirklich WYSIWYG machen, was einige Darstellungen angeht. Der Windows-Dialog zum Beispiel hat ein virtuelles Lineal, auf das man ein echtes Lineal drauflegen kann, um am Bildschirm exakt einen Zoll abzumessen - total auf Grafikkarte und Monitor abgestimmt.

              - Sven Rautenberg