michaah: browserweiche für alle IE mittel cgi?

Ich weiß, ich habe das Thema schonmal angesprochen (conditional comments) aber da das wenig zufriedenstellend im Ergebnis war (lief ja auf @supports hacks hinaus) habe ich nochmals herumgegoogelt und bin auf das Uraltthema Browserweiche gestoßen, dort wurde als Alternative zu CC irgend ein CGI erwähnt.

Meine Hoffnung ist nach wie vor den IEs ab IE9! die derzeitige Seite weiterhin vorsetzen zu können(die gibt es ja und funktioniert), und allen anderen eben die neue im responsive Design. Ich habe einfach keinen Nerv, so hilfsbereit und fähig ihr auch seid, dauernd nachzuprüfen welche Technik IE kompatibel, welche nicht, für welche eine spezielle Alternative besteht usw.

Daher hier meine Bitte: Kann mir jemand beschreiben oder code zeigen wie man alle IEs abfängt und denen eine eigene Seite zeigt?

Die traurige Wahrheit der aktuellen Besucherstatistik für September 2020 der Seite um die es geht besagt, dass in der Summe insgesamt 22% MSIE Browser benutzen, Edge unter 1%, IE9 20%, alle anderen IES im unter 1% Bereich. Allerdings fehlt in der Liste der IE10, d.h. dessen Nutzer wurden wohl dem IE9 zugeschlagen. Ob das technisch gerechtfertigt ist kann ich nicht beurteilen.

Zwar war mir klar, dass der IE in der Schweiz noch recht verbreitet ist, aber das das derart durchschlägt hat mich eben fast von Stuhl gehauen.

Daher: Ist mein Vorhaben irgendwie umzusetzten (eventuell auch auf die gefahr hin dasss das nur zu 95% klappt). Oder ein pop-up was nur bei IEs erscheint mit einen Link zur IE version .....oder ..oder

  1. Hallo michaah,

    20% IE9? Das muss aber ein sehr spezielles Publikum sein, das auf Windows Vista oder irgendein uraltes Mobilwindows festgenagelt ist. Ab Win7 ist der IE11 verfügbar.

    Du kannst mit serverseitiger Software den Browser nicht erkennen. Oder nur begrenzt.

    Der Browser gibt Dir den sogenannten UserAgent String mit; das ist einer de Request Header. Den kannst Du in PHP auswerten und dementsprechend verzweigen. Ggf. bietet Dir auch der Webserver an, den UserAgent String auszuwerten und dementsprechend andere Ressourcen auszuliefern.

    Du kannst. ABER DU SOLLST NICHT. UserAgent-Analysen sind State of the Art der 2000er.

    Für meinen Chrome sieht es so aus:

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36

    Und für den IE11 auf meinem Win10 so:

    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko

    Daran siehst Du schon, dass die Browser da eine Menge Zeugs reinschreiben, damit sie von UserAgent Abfragen möglichst vielseitig erkannt werden. Wie Mozilla wollen sie alle aussehen, wie Gecko auch, und Chrome erzählt noch eine Menge Märchen mehr. Unter anderem erzählen die Browser eigentlich auch viel zu viel. Was geht es einen Server an, ob ich Win10 verwende? Oder Chrome im 64-bit Modus laufen lasse?

    Opera hatte eine Funktion, den UserAgent String frei eintragen zu können, um sich unwilligen Servern gegenüber maskieren zu können.

    Das Bekloppteste beim IE ist: Man kann ihn ja in den Entwicklerwerkzeugen verdummen (noch weiter als er ohnehin schon ist) und eine frühere IE-Version zur Seitendarstellung auswählen. Ich habe mal IE9 ausgewählt. Und bekomme als UserAgent:

    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko

    Soviel zu UserAgent Prüfungen für den IE9. Wenn dein Server dem IE9 was besonders Antikes liefern will, dann kannst Du das so nicht mal testen.

    Fazit: Das macht man nicht. Man verwendet clientseitige Feature Detection, um bestimmte Funktionen nur bei Vorhandensein zu nutzen. Oder Polyfills, um benötigte, aber fehlende Funktionen nachzurüsten.

    Wenn man Uraltbrowser unterstützen will, artet das echt in Arbeit aus. Besser, man unterstützt sie nicht, sondern toleriert sie. Die Seite muss - das ist dann Progressive Enhancement, nicht Responsive Design - so gebaut sein, dass sie auf einem Altbrowser nicht zertrümmert aussieht. Mit PE kannst Du sie für moderne Browser aufhübschen.

    Bei 20% IE9 sieht die Sache allerdings schon anders aus. So vielen Kunden mag man keine Primitivversion seiner Seite schicken. Kannst Du auf deiner modernen Seite nicht irgendwo einen Link "Vintage-Version dieser Seite" einblenden?

    Du musst dabei auch bedenken, dass Du dann zwei Versionen der Seite pflegen und testen musst. Willst Du Dir das antun? Oder ist die Vintage-Version eine konservierte Alt-Version?

    Rolf

    --
    sumpsi - posui - obstruxi
    1. @@Rolf B

      […] den UserAgent String auszuwerten und dementsprechend andere Ressourcen auszuliefern.

      Du kannst. ABER DU SOLLST NICHT.

      Bis hierher uneingeschränkte Zustimmung.

      UserAgent-Analysen sind State of the Art der 2000er.

      Nö. User agent sniffing war nie state of the art.

      Daran siehst Du schon, dass die Browser da eine Menge Zeugs reinschreiben, damit sie von UserAgent Abfragen möglichst vielseitig erkannt werden.

      Immer wieder gern gelesen: Die Geschichte der User-Agent-Strings

      --
      „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
      1. Hallo Gunnar,

        Nö. User agent sniffing war nie state of the art.

        Dö. Dein verlinkter Artikel beschreibt genau das. Es ist schon eine Kunst, aus diesem Durcheinander etwas brauchbares herauszulesen.

        Aber mittlerweile ist die Kunst so modern geworden, dass sie keine mehr versteht, und darum wechselten die Kunstkonsumenten zum Feature Detecting, als LiveScript das Licht der Sonne erblickte und "Java" aufgebrannt bekam, weil es die sonnigen Java Applets scripten sollte.

        Mittlerweile ist Java von Larrys Weissagungen verraten worden und kein Browser mag es mehr haben, aber LiveScript gibt's immer noch und wird seine Brandmarke nicht mehr los.

        Rolf

        --
        sumpsi - posui - obstruxi
    2. ... Oder ist die Vintage-Version eine konservierte Alt-Version?

      Rolf

      Exakt. Die gibt es ja bereits. Und daher habe ich 0,0 Interesse für diese IEs jedem fehlenden feature hinterher zu coden. Allein der Gedanke an das Testen sorgt bei mir für sich aufrollende Fingernägel.

      Ich habe mich nochmals mit den Serverstats beschäftigt. IE9 ist tatsächlich für alle Zeiträume der um Größenordnungen meist genutze IE-Browser. Ich konnte nun doch auch Stats für den IE10 finden. Die Zahlen für IE9 muß ich leicht korrigieren, aber das ändert nichts wesentliches, 15+% statt 20% . Ich hatte mich etwas im gewählten und angezeigten Zeitraum geirrt, so sind es für die 2 Wochen Sep. 2020 "nur" 15+% IE9, die anderen IEs und auch EDGE! im 1+%-igen Bereich.

      Wenn das über ein cgi-Script nicht für alle IEs in einen Aufwasch möglich ist werde ich per conCom die IE9er mit der alten Versin beliefern (da geht da ja noch), und die IE10/11 vernachlässigen wenn das mit der feature detection ausartet.

      Danke.

      Gruß

      M.

  2. Hallo michaah,

    Die traurige Wahrheit der aktuellen Besucherstatistik für September 2020 der Seite um die es geht besagt, dass in der Summe insgesamt 22% MSIE Browser benutzen, Edge unter 1%, IE9 20%, alle anderen IES im unter 1% Bereich. Allerdings fehlt in der Liste der IE10, d.h. dessen Nutzer wurden wohl dem IE9 zugeschlagen. Ob das technisch gerechtfertigt ist kann ich nicht beurteilen.

    bist du sicher, dass die Statistik stimmt? Ich setze auf meinen Seiten das details-Element ein, das von IE und altem Edge nicht unterstützt wird. Für diese Browser habe ich einen Polyfill, der nur geladen wird, wenn er benötigt wird. Ich frage im Javascript ab, ob details untestützt wird. So habe ich meine eigene Statistik: ich zähle, wieviele Browser das Haupt-Script laden, und wieviele davon den Polyfill. Das sind bei mir 4%, Tendenz fallend. Diese Werte passen auch in etwa zu den Statistiken, die sonst so veröffentlicht werden. 20% IE9 würde ich äußerst kritisch hinterfragen.

    Zu deinem Problem: Setz auf der neuen Seite einen Link auf die alte, prüfe per Javascript, ob es sich um einen modernen Browser handelt, und versteck bei diesen den Link.

    Gruß
    Jürgen

    1. bist du sicher, dass die Statistik stimmt?

      Naja, ich habe sie nicht selbst gefälscht ;-)

      Die Seite wendet sich an Schweizer Publikum, dort an Erwachsene, und die mit vermutlich erhöhtem Anteil an älteren Menschen. Der IE ist, das sagen internationale Stats, in der Schweiz noch weiter verbreitet als z.B. hier in DE. So ergibt das schon Sinn. Dennoch war ich von den Zahlen dann überrascht ... weil ich mir die lange nicht mehr angeschaut hatte.

      ...

      Zu deinem Problem: Setz auf der neuen Seite einen Link auf die alte, prüfe per Javascript, ob es sich um einen modernen Browser handelt, und versteck bei diesen den Link.

      Das allerdings nähert sich meiner Überlegung an. Ich wollte schon fragen ob es irgendeine Konstruktion gibt die die IEs so falsch darstellen, dass man damit einen Link eben für IEs einblenden kann 😀 Dein Vorschlag klingt eleganter. Nur habe ich von JS keine Ahnung und will mich damit eigentlich nicht befassen weil ich JS für die Seite an sich nicht brauche. Aber wenn sonst alle Stricke reißen, hast du vielleicht nen Link zu ner Art Beispielbaukasten dafür. Ich meine, dieser Trick wird ja sonst schonmal im Netz aufgetaucht sein 😉 ... insbesondere die Prüfung auf modernen vs. unmoderne Browser. Das wäre ja wieder das eigentliche Problem. Auch wenn sich meine Anfrage um IEs drehte, ich hätte nichts dagegen allen alten Browsern die alte Seite vorzusetzen, ganz im Gegenteil.

      Danke soweit

      Gruß

      Michael

      1. Hallo michaah,

        Ich wollte schon fragen ob es irgendeine Konstruktion gibt die die IEs so falsch darstellen, dass man damit einen Link eben für IEs einblenden kann

        Du kannst ein kleines Script machen, das prüft, ob bestimmte Features vorhanden sind. Zum Beispiel das fetch API. Das kennt kein IE.

        if (!window.fetch) {
           // Internet Explorer
           document.getElementById("LinkToIE").style="display:block;"
        }
        

        Im HTML

        <div id="LinkToIE">
           <!-- Markup für den Link zum IE -->
        </div>
        

        Im CSS

        #LinkToIE {
           display:none;
           /* weitere nötige Eigenschaften */
        }
        

        Rolf

        --
        sumpsi - posui - obstruxi
        1. @@Rolf B

          if (!window.fetch) {
             // Internet Explorer
             document.getElementById("LinkToIE").style="display:block;"
          }
          

          Im HTML

          <div id="LinkToIE">
             <!-- Markup für den Link zum IE -->
          </div>
          

          Im CSS

          #LinkToIE {
             display:none;
             /* weitere nötige Eigenschaften */
          }
          

          Um da nicht mit style in JavaScript rumzupfuschen:

          if (!window.fetch) {
             // Internet Explorer
             document.getElementById("LinkToIE").hidden = false;
          }
          

          Im HTML

          <div id="LinkToIE" hidden="">
             <!-- Markup für den Link zum IE -->
          </div>
          

          Im CSS

          [hidden] {
             display:none;
          }
          

          😷 LLAP

          --
          „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
          1. Hallo Gunnar,

            Im CSS

            [hidden] {
               display:none;
            }
            

            und das kann in diesem Fall sogar entfallen, da die Browser, die kein hidden kennen (IE 10 und älter) ja den Link sehen sollen. 😀

            Gruß
            Jürgen

            1. @@JürgenB

              Im CSS

              [hidden] {
                 display:none;
              }
              

              und das kann in diesem Fall sogar entfallen, da die Browser, die kein hidden kennen (IE 10 und älter) ja den Link sehen sollen. 😀

              Dann kann auch das JavaScript entfallen. Als Browserweiche dann nicht window.fetch, sondern das hidden-Attribut.

              Hm, das fällt einem auf die Füße, wenn man hidden noch anderswo einsetzt.

              😷 LLAP

              --
              „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
              1. ...

                Dann kann auch das JavaScript entfallen. Als Browserweiche dann nicht window.fetch, sondern das hidden-Attribut.

                Ich war schon froh, das obige JS Beispiel gedanklich durchdringen zu können (ohne wirklich Ahnung von JS zu haben). Hört sich sehr nach Vorschlaghammer an, ist aber wohl wonach ich gefragt hatte. Auf jeden Fall ne Lösung wenn der IE Frust anhält. Danke dafür.

                Wenn es aber sogar ohne JS ginge würde ich mich auch nicht beschweren.

                Hm, das fällt einem auf die Füße, wenn man hidden noch anderswo einsetzt.

                Bislang verwende ich "hidden" nicht, in der derzeitigen, zukünftig alten Seite (dann nur für den IE) also ganz sicher nicht. Und in der neuen nur dann wenn ich hidden bei einem geplanten Akkordeon irgendwie brauche, das überblicke ich derzeit noch nicht. Aber gut, dann müsste ich eben in den sauren Apfel beißen und mir ein paar JS Kenntnisse reinpfeifen ...

                Es mildert aber schon mal meine IE Allergie hier Lösungsansätze vorgestellt zu bekommen wie man den IE möglichst simpel abfertigt ....

                Nochmals mercie!