Christian S.: Ist Verlass auf navigator.product === "Gecko"

Hi

ich würde gerne Gecko Browser per JavaScript erkennen. Ist dabei Verlass auf
navigator.product === "Gecko"

oder kann man z.B. in Opera die product Eigenschaft spoofen?

Gruß!

  1. Hi,

    ich würde gerne Gecko Browser per JavaScript erkennen.

    aus welchem Grund?

    Ist dabei Verlass auf
    navigator.product === "Gecko"

    Nein.

    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,

      aus welchem Grund?

      Da ich einen Gecko Bug korrigieren möchte.

      Ist dabei Verlass auf
      navigator.product === "Gecko"

      Nein.

      Wie kann man denn sicher eine Gecko Engine feststellen?

      Gruß!

      1. Hallo,

        Da ich einen Gecko Bug korrigieren möchte.

        Der wäre?

        Gruß

        1. Hi,

          Der wäre?

          Wenn ein Element einen Border hat und gleichzeitg der berechnte Style nicht overflow === "visible" hat, dann ist der Border nicht in offsetLeft/Top enthalten.

          Das ist wichtig, wenn man die Position eines Elementes berechnen will.

          Weitere Kommentare/Code dazu:
          < http://api.dojotoolkit.org/jsdoc/dojo/HEAD/dojo._getMarginBox>
          < http://github.com/anotherjesse/taboo/commit/124e10a51f958e8d939052a43134b15a9e120811>

          Es ist vielleicht kein richtiger Bug, da offsetLeft/Top nicht genau spezifiziert ist m.W., aber in allen anderen Fällen ist der Border halt mit drin.

          Aber FF 3.0 ist das Problem nicht mehr vorhanden, jedoch kann man da ja auch getBoundingClientRect zur berechnung einer Position benutzen.

          Gruß!

          1. Hi,

            nur irgendwie benutzen selbst große JS-Frameworks den Useragent zum Herausfinden von Browser und Version. Aber ist ja noch ungenauer.

            Gruß!

            1. Hi,

              nur irgendwie benutzen selbst große JS-Frameworks den Useragent zum Herausfinden von Browser und Version. Aber ist ja noch ungenauer.

              Daß man große Scripte schreibt, heißt ja nicht, daß man keine Fehler machen darf ...

              Gruß, Cybaer

              --
              Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
              (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
              1. nur irgendwie benutzen selbst große JS-Frameworks den Useragent zum Herausfinden von Browser und Version. Aber ist ja noch ungenauer.
                Daß man große Scripte schreibt, heißt ja nicht, daß man keine Fehler machen darf ...

                Wenn ein kleines Script einen kleinen Fehler enthält, verändert das seinen Autoren, damit alles beim Alten bleibt.

                Wenn eine grosse Anwendung einen grossen Fehler enthält, verändert das die Welt, damit alles beim Alten bleibt.

                mfg Beat

                --
                                 /|
                  <°)))o><      / |    /|
                            ---- _|___/ |     ><o(((°>
                           OvVVvO    __ |         ><o(((°>
                <°)))o><  /v    v\/  |
                 <°)))o>< ^    ^/_/_         ><o(((°>
                           ^^^^/___/
                ><o(((°>    ----       ><o(((°>
                   <°)))o><                      ><o(((°>o
                1. Hi,

                  Wenn eine grosse Anwendung einen grossen Fehler enthält, verändert das die Welt, damit alles beim Alten bleibt.

                  Warum muß ich nur gleich an den IE denken?

                  Gruß, Cybaer

                  --
                  Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
                  (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
          2. Moin.

            Der wäre?

            Wenn ein Element einen Border hat und gleichzeitg der berechnte Style nicht overflow === "visible" hat, dann ist der Border nicht in offsetLeft/Top enthalten.

            Das ist in der Tat ein Fall, wo eine Überprüfung auf den Bug zwar möglich, aber vermutlich nicht sinnvoll ist: Es müssten Elemente und Elternelemente erzeugt (einmal mit overflow: visible, einmal ohne) und sogar ins DOM eingehängt werden, damit die offset-Eigenschaften verfügbar sind.

            Eine Überprüfung auf Browsertyp und Version über das navigator-Objekt erscheint mir sinnvoller: Wer seinen User-Agent als FF2 wählt, ohne dass dieser vorliegt, muss dann halt mit falsch berechneten Boxen leben...

            Christoph

      2. Moin Moin!

        aus welchem Grund?

        Da ich einen Gecko Bug korrigieren möchte.

        Ist dabei Verlass auf
        navigator.product === "Gecko"

        Nein.

        Wie kann man denn sicher eine Gecko Engine feststellen?

        Gegenfrage: Die Versionen mit dem "Bug" oder die ohne?

        Du mußt also ohnehin prüfen, ob der Bug vorhanden ist oder nicht. In dieser Prüfung ist es aber (mit an Sicherheit grenzender Wahrscheinlichkeit) nicht notwendig, auch noch zu prüfen, welche Browserengine benutzt wird.

        Also:

          
        if (detectBug()) {  
          enableWorkaround();  
        }  
        
        

        Beispiel:

          
        var a=new Array();  
        if (!a.prototype.push) { // simple, nicht ganz exakte Prüfung für einen uralten IE-Bug  
            // hierher kommen nur antike IE und vielleicht der eine oder andere Exot, der Bug-kompatibel zum IE ist, sich aber nicht als IE identifiziert. In beiden Fällen ist allen Beteiligten geholfen.  
            a.prototype.push=function(x) { // nicht ganz perfekter Workaround  
                this[this.length]=x;  
                return this.length;  
            }  
        }  
        
        

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    2. Hi there,

      ich würde gerne Gecko Browser per JavaScript erkennen.

      aus welchem Grund?

      Ist dabei Verlass auf
      navigator.product === "Gecko"

      Nein.

      Welcher komplett Gestörte bezeichnet so ein Posting als hilfreich???

  2. Hi,

    ich würde gerne Gecko Browser per JavaScript erkennen. Ist dabei Verlass auf
    navigator.product === "Gecko"

    Nein. Z.Zt. benutzt der Safari die auch.

    Also:

    is_saf=(navigator.product && navigator.product=="Gecko" && navigator.vendor && navigator.vendor.indexOf("Apple")>-1);  
    is_moz=(navigator.product && navigator.product=="Gecko" && !is_saf);
    

    oder kann man z.B. in Opera die product Eigenschaft spoofen?

    Nicht daß ich wüßte ...

    Gruß, Cybaer

    --
    Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
    (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)