karwen: Browsererkennung

Hallo Experten,

ich habe ein kleines Problem.
Ich habe hier bestimmte Webberichte, welche nur mit dem Internet Explorer korrekt angezeigt werden (ist eine SAP-Eigenheit). Da aber viele User den Firefox benutzen und sich wundern, warum bestimmte Sachen nicht richtig angezeigt werden, möchte ich via Javascript-Funktion eine Überprüfung des Browsers einbauen und anschließend einen Hinweis ausgeben. Leider reichen meine Javascriptkenntnisse dafür aber nicht aus. Habt ihr vielleicht eine Idee, wie man so etwas umsetzen könnte?

Vielen Dank im Vorraus und viele Grüße,
karwen

  1. Hi,

    falls du wirklich nur zwischen IE und nicht-IE unterscheiden willst könntest du conditional comments verwenden:

    <!--[if !IE]> -->  
    Not Internet Explorer  
    <!-- <![endif]-->
    

    ~dave

    1. @@dave:

      nuqneH

      falls du wirklich nur zwischen IE und nicht-IE unterscheiden willst könntest du conditional comments verwenden:

      Oder in JavaScript conditional compilation.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Lieber Gunnar Bittersmann,

        falls du wirklich nur zwischen IE und nicht-IE unterscheiden willst könntest du conditional comments verwenden:

        Oder in JavaScript conditional compilation.

        meines Wissens kannst Du mit Conditional Compilation lediglich auf die Unterstützung für Conditional Compilations und die verwendete JScript-Version prüfen. Vielleicht gibt es irgendwann einen Browser außer dem IE, der JScript unterstützt?

        Wenn Du die IE-Version herausfinden willst, so musste ich hier selbst feststellen, dass dazu Conditional Compilation nicht geeignet ist, da helfen tatsächlich nur die Conditional Comments.

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. @@Felix Riesterer:

          nuqneH

          Wenn Du die IE-Version herausfinden willst, so musste ich hier selbst feststellen, dass dazu Conditional Compilation nicht geeignet ist, da helfen tatsächlich nur die Conditional Comments.

          Mitnichten. Ab dem 8er steht die Versionsnummer in document.documentMode (Abschnitt „JavaScript in Thomas’ Artikel), im 7er wurde window.XMLHttpRequest eingeführt:

          /*@cc_on  
          [code lang=javascript]var ieversion = document.documentMode || (window.XMLHttpRequest ? 7 : 6);
          

          @*/[/code]

          Qapla'

          PS: Die Unterscheidung zwischen 6er und Fossillien wäre auch möglich, die spare ich mir aber.

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. [latex]Mae  govannen![/latex]

            /*@cc_on

            [code lang=javascript]var ieversion = document.documentMode || (window.XMLHttpRequest ? 7 : 6);

            
            > @\*/[/code]  
              
            Soweit ich das in Erinnerung habe, ist ein Test auf window.XMLHttpRequest allerdings nicht zu 100% zuverlässig; wenn im IE7 in den Einstellungen abgeschaltet, IE7 würde also als 6 erkannt.  
            Ich finde nur gerade nicht die Stelle, wo ich es testweise deaktivieren könnte (Bin ich übrigens der Einzige, der die Beschreibungen der Einstellungen in Microsofts Kauderwelsch die halbe Zeit nicht versteht?)  
              
            Dürfte wenn überhaupt aber nur im Firmen-Umfeld überhaupt vorkommen, also wahrscheinlich oft unerheblich.  
              
            Stur lächeln und winken, Männer!  
            Kai
            
            -- 
            It all began when I went on a tour, hoping to find some furniture  
             Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)  
            [SelfHTML-Forum-Stylesheet](http://selfhtml.knrs.de/#h_stylesheet)
            
            1. Bin ich übrigens der Einzige, der die Beschreibungen der Einstellungen in Microsofts Kauderwelsch die halbe Zeit nicht versteht?

              Du meinst also solche Formulierungen wie
              unsichere Seite
              fast sichere Seite
              ganz sichere Seite
              ein bisschen ziemlich sichere Seite
              sind unverständlich?
              Ja ich auch! Drum nutze ich keinen IE, wenn der unsichere Dinge tun könnte, die ich per Einstellung erlauben kann. Vor allem wenn ich nicht mal verstehe was damit alles gemeint ist.

            2. Hallo,

              /*@cc_on

              [code lang=javascript]var ieversion = document.documentMode || (window.XMLHttpRequest ? 7 : 6);

              
              > > @\*/[/code]  
              > Soweit ich das in Erinnerung habe, ist ein Test auf window.XMLHttpRequest allerdings nicht zu 100% zuverlässig;  
                
              Ohne konkretes Ziel über eine Implementierung zu diskutieren ergibt keinen Sinn. Obige wirft verschiedene Ansätze durcheinander:  
                
              - Die tatsächliche Version des Browsers  
              - Der Kompatibilitätsmodus des Browsers  
              - Unterstützung von JScript Conditional Comments  
              - Unterstützung eines Features durch eine Objektabfrage  
                
              Ich wüsste nicht, in welchen Fällen man eine so planlose Heuristik wählen würde. Wenn man ein bestimmtes Feature abfragen will, dann sollte man das tun, andernfalls ist der direkte Weg über navigator.userAgent sinnvoll.  
                
              Mathias
              
              1. [latex]Mae  govannen![/latex]

                /*@cc_on

                [code lang=javascript]var ieversion = document.documentMode || (window.XMLHttpRequest ? 7 : 6);

                
                > > > @\*/[/code]  
                > > Soweit ich das in Erinnerung habe, ist ein Test auf window.XMLHttpRequest allerdings nicht zu 100% zuverlässig;  
                >   
                > Ohne konkretes Ziel über eine Implementierung zu diskutieren ergibt keinen Sinn. Obige wirft verschiedene Ansätze durcheinander:  
                >   
                > - Die tatsächliche Version des Browsers  
                > - Der Kompatibilitätsmodus des Browsers  
                > - Unterstützung von JScript Conditional Comments  
                > - Unterstützung eines Features durch eine Objektabfrage  
                >   
                > Ich wüsste nicht, in welchen Fällen man eine so planlose Heuristik wählen würde.  
                  
                Und CC sind ohnehin eher als 'gefährlich' anzusehen, weil sie von verschiedenen Minifiern entsorgt werden.  
                  
                Stur lächeln und winken, Männer!  
                Kai
                
                -- 
                It all began when I went on a tour, hoping to find some furniture  
                 Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)  
                [SelfHTML-Forum-Stylesheet](http://selfhtml.knrs.de/#h_stylesheet)
                
              2. Lieber molily,

                andernfalls ist der direkte Weg über navigator.userAgent sinnvoll.

                aber ist er nicht ebenso "unzuverlässig"?

                Liebe Grüße,

                Felix Riesterer.

                --
                ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
                1. andernfalls ist der direkte Weg über navigator.userAgent sinnvoll.

                  aber ist er nicht ebenso "unzuverlässig"?

                  Hundertprozentig zuverlässig ist keine der Methoden. Der User-Agent ist dafür vorgesehen, Browsername und -version wiederzugeben. Er ist fälschbar und wer das tut, kann die Auswirkungen abschätzen, solange Webautoren Feature- und User-Agent-Abfragen sinnvoll trennen. Heuristiken erlauben bloß indirekte Schlüsse auf die Browserversion und führen eine ganze Reihe von logischen Abhängigkeiten ein, welche der Zuverlässigkeit eher abträglich sind. Wer einzelne Features aus irgendwelchen Gründen deaktiviert, kann die Auswirkungen nur abschätzen, wenn es keine solchen Heuristiken gibt.

                  Mathias

                  1. Lieber molily,

                    vielen Dank für Deine Konkretisierungen.

                    Wer einzelne Features aus irgendwelchen Gründen deaktiviert, kann die Auswirkungen nur abschätzen, wenn es keine solchen Heuristiken gibt.

                    Hehe, oder anders formuliert: Wer seinen IE verbiegt, der soll sich dann nicht bei mir als Seitenautor (besser: Web-App-Autor) beschweren, dass es bei ihm nicht "funzt". Und damit man mir nicht unziemliches IE-Bashing nachsagen kann möchte ich anmerken, dass dieses conditional-confusing ausschließlich in diesem Ungetüm vorhanden ist. Echte Browser haben das noch nie benötigt!

                    Liebe Grüße,

                    Felix Riesterer.

                    --
                    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
                  2. @@molily:

                    nuqneH

                    Hundertprozentig zuverlässig ist keine der Methoden. Der User-Agent ist dafür vorgesehen, Browsername und -version wiederzugeben. Er ist fälschbar und wer das tut, kann die Auswirkungen abschätzen

                    Kann der User-Agent nicht auch durch Proxys verfälscht werden?

                    Qapla'

                    --
                    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                    (Mark Twain)
                    1. Hallo,

                      Hundertprozentig zuverlässig ist keine der Methoden. Der User-Agent ist dafür vorgesehen, Browsername und -version wiederzugeben. Er ist fälschbar und wer das tut, kann die Auswirkungen abschätzen
                      Kann der User-Agent nicht auch durch Proxys verfälscht werden?

                      ja, natürlich. Und auch durch lokale Software wie etwa eine Desktop-Firewall.

                      Ciao,
                       Martin

                      --
                      Dem Philosoph ist nichts zu doof.
                      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                      1. Kann der User-Agent nicht auch durch Proxys verfälscht werden?

                        ja, natürlich. Und auch durch lokale Software wie etwa eine Desktop-Firewall.

                        Es ging hier um navigator.userAgent, nicht um den HTTP-User-Agent, wie auch in aus meinen Postings hervorgehen sollte. Dort bin ich auch auf die Fälschbarkeit eingegangen.

                        Welche Desktop-Firewall ändert navigator.userAgent so ab, dass eine Browsererkennung nicht mehr möglich ist? Wenn sie es könnte, wieso sollte sie das tun?

                        Mathias

                    2. Kann der User-Agent nicht auch durch Proxys verfälscht werden?

                      Proxies sprechen HTTP, nicht JavaScript. Ein Proxy kann nicht den Rückgabewert von navigator.userAgent ändern, sofern er nicht »navigator.userAgent« im JavaScript-Code durch einen String-Literal ersetzt (eine Änderung, die man jedoch einfach durch Verschleierung umgehen könnte).

                      Mathias

            3. Ich finde nur gerade nicht die Stelle, wo ich es testweise deaktivieren könnte

              http://i.msdn.microsoft.com/dynimg/IC73886.gif

              Heißt in meinem deutschen Windows »Original-XMLHTTP-Unterstützung aktivieren«.

              Mathias

              1. [latex]Mae  govannen![/latex]

                Ich finde nur gerade nicht die Stelle, wo ich es testweise deaktivieren könnte

                http://i.msdn.microsoft.com/dynimg/IC73886.gif

                Heißt in meinem deutschen Windows »Original-XMLHTTP-Unterstützung aktivieren«.

                Typisch MS. Alles andere diesbezüglich ist unter den Einstellungen der jew. Sicherheitssstufe abgelegt, nur das nicht. Nun ja.

                Stur lächeln und winken, Männer!
                Kai

                --
                It all began when I went on a tour, hoping to find some furniture
                 Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)
                SelfHTML-Forum-Stylesheet
          2. Das mit Abstand coolste, was mir bislang zur IE-Detection untergekommen ist:

            http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments/

            1. Das mit Abstand coolste, was mir bislang zur IE-Detection untergekommen ist:

              http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments/

              Hallo Mitleser,

              danke für den genialen Tip, ich werde das gleich mal testen :)

              Viele Grüße,
              karwen

            2. Lieber Mitleser,

              http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments/

              das DIng hat wirklich Esprit!

              Liebe Grüße,

              Felix Riesterer.

              --
              ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
        2. Hi there,

          [...] Vielleicht gibt es irgendwann einen Browser außer dem IE, der JScript unterstützt?

          Es freut mich, daß in diesem Forum weiter gescherzt wird wie eh und je...

          1. Hallo Klawischnigg,

            [...] Vielleicht gibt es irgendwann einen Browser außer dem IE, der JScript unterstützt?

            Es freut mich, daß in diesem Forum weiter gescherzt wird wie eh und je...

            dann aber richtig:

            [...] Vielleicht gibt es irgendwann einen Browser, der JScript unterstützt?

            Gruß, Jürgen

  2. Hallo Experten,

    ich habe ein kleines Problem.
    Ich habe hier bestimmte Webberichte, welche nur mit dem Internet Explorer korrekt angezeigt werden (ist eine SAP-Eigenheit). Da aber viele User den Firefox benutzen und sich wundern, warum bestimmte Sachen nicht richtig angezeigt werden, möchte ich via Javascript-Funktion eine Überprüfung des Browsers einbauen und anschließend einen Hinweis ausgeben. Leider reichen meine Javascriptkenntnisse dafür aber nicht aus. Habt ihr vielleicht eine Idee, wie man so etwas umsetzen könnte?

    Vielen Dank im Vorraus und viele Grüße,
    karwen

    Hallo,

    danke für die vielen Antworten.
    Irgendwie hab ich mir nicht vorgestellt, dass sich das so schwierig gestaltet. Eigentlich hatte ich mir eine kleine Funktion gewünscht, die einfach nur den Browsertyp ausliest, aber das ist wohl so ohne weiteres nicht möglich. Ich werde mal den Vorschlag von Gunnar aufgreifen und ein wenig mit conditional compilations rumprobieren. Danke an dieser Stelle.

    Falls jemand trotzdem noch eine kleine Funktion hat, welche den Browsertyp auslesen kann, dann bin ich natürlich dafür dankbar :)

    Viele Grüße,
    karwen

    1. Irgendwie hab ich mir nicht vorgestellt, dass sich das so schwierig gestaltet.

      Es ist nicht schwierig. Dir wurden nur Antworten gegeben, die die Sache schwieriger machten, als sie ist.

      Schau dir einmal den Code von $.browser in der aktuellen jQuery-Version an. Dieser ist einfach zu extrahieren und ist gut getestet.

      Ich werde mal den Vorschlag von Gunnar aufgreifen und ein wenig mit conditional compilations rumprobieren.

      Das ist keine gute Idee. Wenn du einfach den IE erkennen herausfinden willst, so liegt es sehr fern, mit Conditional Compilation und anderen Tests auf unbedeutende und unbeteiligte Features zu arbeiten.

      Falls jemand trotzdem noch eine kleine Funktion hat, welche den Browsertyp auslesen kann, dann bin ich natürlich dafür dankbar :)

      Das ist der extrahierte Code aus jQuery 1.7.1:

      var browser = (function () {  
        
      var  
        rwebkit = /(webkit)[ \/]([\w.]+)/,  
        ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,  
        rmsie = /(msie) ([\w.]+)/,  
        rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,  
        browserMatch = uaMatch( navigator.userAgent ),  
        browser = {};  
        
      if ( browserMatch.browser ) {  
        browser[ browserMatch.browser ] = true;  
        browser.version = browserMatch.version;  
      }  
        
      return browser;  
        
      function uaMatch( ua ) {  
        ua = ua.toLowerCase();  
        var match = rwebkit.exec( ua ) ||  
        ropera.exec( ua ) ||  
        rmsie.exec( ua ) ||  
        ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||  
        [];  
        return { browser: match[1] || "", version: match[2] || "0" };  
      }  
        
      })();
      

      browser ist nun ein Objekt, welches die Eigenschaften webkit, opera, msie, mozilla besitzt, je nachdem, welcher Browser bzw. welche Engine erkannt wurde. Außerdem gibt es die version-Eigenschaft, falls der Browser erkannt wurde. Siehe jQuery.browser.

      if (!browser.msie) {  
        alert('Kein IE');  
      }
      

      Mathias

      1. @@molily:

        nuqneH

        Das ist keine gute Idee. Wenn du einfach den IE erkennen herausfinden willst, so liegt es sehr fern, mit Conditional Compilation und anderen Tests auf unbedeutende und unbeteiligte Features zu arbeiten.

        ?? Conditional Compilation wird ausschließlich vom IE verwendet. Es ist also _das_ Mittel, um einen IE _sicher_ zu erkennen. Warum sollte man auf navigator.userAgent setzen?

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. ?? Conditional Compilation wird ausschließlich vom IE verwendet. Es ist also _das_ Mittel, um einen IE _sicher_ zu erkennen.

          IE 10 wird Conditional Comments entfernen. Das macht die »coolen« Scripte, die hier gepostet wurden, bereits obsolet. Was ist, wenn IE 11 auch Conditional Compilation entfernen sollte?

          Das ist nur wahrscheinlich: Conditional Compilation ergibt keinen Sinn mehr. Es ist für JScript im Kontext von WSH und .NET gedacht, nicht für den Webkontext. ECMAScript wird standardisiert weiterentwickelt und Microsoft nimmt daran teil. Die JScript-Engine im IE ist von der Weiterentwicklung von JScript längst abgekoppelt und folgt nur noch ECMAScript. Zukünftige ECMAScript-Erweiterungen werden eigene Versionierung mit sich bringen. Conditional Compilation funktioniert zwar bei bisherigen IEs, ist aber keine zukunftsfähige Technik.

          Mathias

          1. @@molily:

            nuqneH

            IE 10 wird Conditional Comments entfernen. Das macht die »coolen« Scripte, die hier gepostet wurden, bereits obsolet. Was ist, wenn IE 11 auch Conditional Compilation entfernen sollte?

            Nichts ist.

            Conditional Comments/Conditional Compilation werden eingesetzt, um Unzulänglichkeiten älterer IE-Versionen zu behandeln. Bei IE 10, 11, … erwarte ich, dass es ein standardkonformer Browser ist.

            Conditional Compilation funktioniert zwar bei bisherigen IEs, ist aber keine zukunftsfähige Technik.

            Ja. Muss es auch nicht. Man braucht das für zukünftige Browser nicht mehr.

            Aber warum sollte man Conditional Compilation nicht für alte IEs verwenden, wenn das denn sicherer als 'User-Agent'-Sniffing ist?

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. Conditional Comments/Conditional Compilation werden eingesetzt, um Unzulänglichkeiten älterer IE-Versionen zu behandeln.

              Zustimmung, aber das Behandeln von Unzulänglichkeiten älterer IE-Versionen ist etwas anderes als »IE sicher erkennen«, wovon hier die Rede war.

              Aber warum sollte man Conditional Compilation nicht für alte IEs verwenden, wenn das denn sicherer als 'User-Agent'-Sniffing ist?

              Weil es nicht sicherer ist, wie in diesem Thread in verschiedener Hinsicht gezeigt wurde.

              Mathias

              1. @@molily:

                nuqneH

                Zustimmung, aber das Behandeln von Unzulänglichkeiten älterer IE-Versionen ist etwas anderes als »IE sicher erkennen«, wovon hier die Rede war.

                Nein, davon war im OP nicht die Rede.

                Aber warum sollte man Conditional Compilation nicht für alte IEs verwenden, wenn das denn sicherer als 'User-Agent'-Sniffing ist?

                Weil es nicht sicherer ist, wie in diesem Thread in verschiedener Hinsicht gezeigt wurde.

                Was sollte an document.documentMode nicht sicher sein?

                In conditional compilation hab ich das nur gewrappt, weil Nicht-IEs den Code nicht ausführen müssen. OK, wenn IE 10 conditional compilation abschafft und trotzdem ieversion gesetzt werden soll, dann halt so:

                var ieversion = document.documentMode /*@cc_on [code lang=javascript]|| (window.XMLHttpRequest ? 7 : 6) @*/;[/code]

                Und ja, die Abfrage von window.XMLHttpRequest zu Unterscheidung zwischen IE 7 und IE < 7 ist ein „Test auf unbedeutende und unbeteiligte Features“. Aber ist er nicht dennoch sicherer als den User-Agent abzufragen? Oder gibt es noch was Drittes, um die Spreu vom Wei^W^W^W schlechte von der ganz schlechten Spreu zu trennen?

                Qapla'

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)
                1. @@Gunnar Bittersmann:

                  nuqneH

                  Oder gibt es noch was Drittes, um die Spreu vom Wei^W^W^W schlechte von der ganz schlechten Spreu zu trennen?

                  Und natürlich stellt sich die Frage: Möchte man das überhaupt? Lohnt es sich, auf IE < 7 noch irgendwelche Rücksicht zu nehmen?

                  Ich tendiere stark zu nein, dann reduzuert sich der Code auf
                  var ieversion = document.documentMode /*@cc_on [code lang=javascript]|| 7 @*/;[/code]

                  Kein „Test auf unbedeutende und unbeteiligte Features“. Alles schick, oder?

                  Qapla'

                  --
                  Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                  (Mark Twain)
                2. Nein, davon war im OP nicht die Rede.

                  Im OP wurde nach einer Erkennung von Nicht-IE-Browsern gefragt. Die Diskussion über die Erkennung spezifischer IE-Versionen war ein Thread-Drift, an dem der Fragende karwen nicht beteiligt war.

                  Was sollte an document.documentMode nicht sicher sein?

                  Es ist sicher dafür, wofür es gedacht ist, nämlich zur Abfrage des Rendermodus, und wie gesagt nicht mit Versionserkennung in einen Topf zu werfen.

                  var ieversion = document.documentMode /*@cc_on [code lang=javascript]|| (window.XMLHttpRequest ? 7 : 6) @*/;[/code]

                  Was gegen einen solchen Ansatz spricht, habe ich bereits in https://forum.selfhtml.org/?t=208553&m=1418416 aufgezählt. Ohne konkrete Zielsetzung wird eine Umsetzung notwendig schwammig, weil nicht definiert ist, was in gewissen Fällen passieren soll (hier Rendermodus vs. Browserversion, deaktiviertes natives XHR).

                  Mathias

                  1. @@molily:

                    nuqneH

                    Nein, davon war im OP nicht die Rede.

                    Im OP wurde nach einer Erkennung von Nicht-IE-Browsern gefragt.

                    Im OP wurde nach „welche nur mit dem Internet Explorer korrekt angezeigt werden […] warum bestimmte Sachen [im Firefox] nicht richtig angezeigt werden“ gefragt. Hört sich für mich stark nach Rendermodus an.

                    (BTW: Welcher IE? Die Unterschiede zwischen IE 6 und IE 9 dürften größer sein als zwischen IE 9 und Firefox.)

                    Was sollte an document.documentMode nicht sicher sein?
                    Es ist sicher dafür, wofür es gedacht ist, nämlich zur Abfrage des Rendermodus,

                    Eben das ist wohl das entscheidende Kriterium, s.o.

                    und wie gesagt nicht mit Versionserkennung in einen Topf zu werfen.

                    Natürlich nicht. Wobei die Version vermutlich völlig irrelevant ist. Wenn der Rendermodus IE 7 ist, dürfte kaum von Interesse sein, ob der Browser ein 7er oder ein als 7er betriebener 8er oder 9er ist.

                    Und wenn du mit „Versionserkennung“ die Version der JScript-Engine meinst: Auch diese ließe sich mit conditional compilation per [link:http://www.javascriptkit.com/javatutors/conditionalcompile2.shtml@title=@_jscript_version] sicher erkennen. (Falls man sowas brauchen sollte. Feature detection wäre wohl das Mittel der Wahl.) Für die Abfrage des User-Agents sehe ich keinerlei Bedarf.

                    Was gegen einen solchen Ansatz spricht, habe ich bereits in https://forum.selfhtml.org/?t=208553&m=1418416 aufgezählt. Ohne konkrete Zielsetzung wird eine Umsetzung notwendig schwammig,

                    Ich bin (begründetermaßen, IMHO) vom Rendering als konkreter Zielsetzung ausgegangen. Dafür ist document.documentMode sicher, wie du selbst sagtest. Nix mit User-Agent.

                    weil nicht definiert ist, was in gewissen Fällen passieren soll (hier Rendermodus vs. Browserversion, deaktiviertes natives XHR).

                    Dass die Unterscheidung von IE 6 und IE 7 per window.XMLHttpRequest problemtatisch ist, habe ich eingeräumt. Dass sie unnötig ist, hab ich auch gesagt. Dass die Browserversion irrelevant ist, auch.

                    Qapla'

                    --
                    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                    (Mark Twain)
      2. Irgendwie hab ich mir nicht vorgestellt, dass sich das so schwierig gestaltet.

        Es ist nicht schwierig. Dir wurden nur Antworten gegeben, die die Sache schwieriger machten, als sie ist.

        Schau dir einmal den Code von $.browser in der aktuellen jQuery-Version an. Dieser ist einfach zu extrahieren und ist gut getestet.

        Ich werde mal den Vorschlag von Gunnar aufgreifen und ein wenig mit conditional compilations rumprobieren.

        Das ist keine gute Idee. Wenn du einfach den IE erkennen herausfinden willst, so liegt es sehr fern, mit Conditional Compilation und anderen Tests auf unbedeutende und unbeteiligte Features zu arbeiten.

        Falls jemand trotzdem noch eine kleine Funktion hat, welche den Browsertyp auslesen kann, dann bin ich natürlich dafür dankbar :)

        Das ist der extrahierte Code aus jQuery 1.7.1:

        var browser = (function () {

        var
          rwebkit = /(webkit) //,
          ropera = /(opera)(?:.version)? //,
          rmsie = /(msie) ([\w.]+)/,
          rmozilla = /(mozilla)(?:.
        ? rv:([\w.]+))?/,
          browserMatch = uaMatch( navigator.userAgent ),
          browser = {};

        if ( browserMatch.browser ) {
          browser[ browserMatch.browser ] = true;
          browser.version = browserMatch.version;
        }

        return browser;

        function uaMatch( ua ) {
          ua = ua.toLowerCase();
          var match = rwebkit.exec( ua ) ||
          ropera.exec( ua ) ||
          rmsie.exec( ua ) ||
          ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
          [];
          return { browser: match[1] || "", version: match[2] || "0" };
        }

        })();

        
        >   
        > browser ist nun ein Objekt, welches die Eigenschaften webkit, opera, msie, mozilla besitzt, je nachdem, welcher Browser bzw. welche Engine erkannt wurde. Außerdem gibt es die version-Eigenschaft, falls der Browser erkannt wurde. Siehe [jQuery.browser](http://api.jquery.com/jQuery.browser/).  
        >   
        > ~~~javascript
        
        if (!browser.msie) {  
        
        >   alert('Kein IE');  
        > }
        
        

        Mathias

        Vielen Dank für das Codefragment und die Tips.
        Ich habe mal ein bisschen damit rumgespielt und funktioniert tadellos *juhu* :)

        Danke Euch allen für die Hinweise.

        Viele Grüße,
        karwen

    2. ..., möchte ich via Javascript-Funktion eine Überprüfung des Browsers einbauen und anschließend einen Hinweis ausgeben.

      wenn es nur um eine Anzeige geht und Du evtl. php als serverseitige Sprache benutzt, könnte für dich

      $_SERVER['HTTP_USER_AGENT']

      interessant sein

      Cheers,
      Baba

      1. @@Baba:

        nuqneH

        $_SERVER['HTTP_USER_AGENT']

        Ob 'User-Agent'-Sniffing nun clientseitig oder serverseitig betrieben wird, acht es nicht besser.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)