kaepten: Browserweiche

Hallo Forum

Ich bin nicht mehr auf dem neusten Stand was die aktuellen Generationen von Browsern betrifft.

Meine altgediente Browserweiche funzt nicht mehr so richtig mit NS6 Opera etc. Diese Browserweiche prüfte nur auf appName, habe aber damit nicht die besten Erfahrungen gemacht und suche drum eine Weiche die mit den Objekten (layer, document.all etc) arbeitet. Hat jemand eine Quelle wo man sich über aktuelle Code-Schnippsels und Ideen informieren kann?

Vielen Dank für Antworten.
cheers
kaepten

PS: Meine alte Weiche -
      <script language="JavaScript" type="text/javascript">
        <!--
        is = new browsercheck();
        function browsercheck(){
          var b = navigator.appName;

switch(b)
          {
            case "Netscape":
              this.b = "ns";
              break;
            case "Microsoft Internet Explorer":
              this.b = "ie";
              break;
            case "Opera":
              this.b = "op";
              break;
            default:
              this.b = b;
              break;
          }
          this.v = parseInt(navigator.appVersion);

this.ns = (this.b=="ns" && this.v>=4);
          this.ns3 = (this.b=="ns" && this.v==3);
          this.ns4 = (this.b=="ns" && this.v==4);
          this.ns5 = (this.b=="ns" && this.v==5);

this.op5 = (this.b=="op" && this.v==5);

this.ie = (this.b=="ie" && this.v>=4);
          this.ie4 = (navigator.userAgent.indexOf('MSIE 4')>0);
          this.ie5 = (navigator.userAgent.indexOf('MSIE 5')>0);

if (this.ie5) this.v=5;
          this.b = b;
          if (this.b=="Microsoft Internet Explorer") this.b = "Internet Explorer";

this.dhtmlie = (this.ie); // Netscape 6 im IE5 Modus betreiben
          this.dhtmlns = (this.ns4);
          }
        //-->
      </script>

  1. Moin !

    Also ich würde das so machen:

    IE4+:        if(document.all)
    NC4.x:       if(document.layers)
    Mozilla/NC6: if((document.getElementById)&&(!(document.all)))
    IE5+:        if((document.all)&&(document.getElementById))
    IE3/NC3:     if((document.images)&&(!((document.layers)||(document.all)||(document.getElementById))))
    IE5+/NC6:    if(document.getElementById)
    IE3+/NC3+:   if(document.images)

    Damit solltest Du eigentlich recht weit kommen :-)

    Ciao,

    Harry

    1. Harry

      IE4+:        if(document.all)
      NC4.x:       if(document.layers)
      Mozilla/NC6: if((document.getElementById)&&(!(document.all)))
      IE5+:        if((document.all)&&(document.getElementById))
      IE3/NC3:     if((document.images)&&(!((document.layers)||(document.all)||(document.getElementById))))
      IE5+/NC6:    if(document.getElementById)
      IE3+/NC3+:   if(document.images)

      Damit solltest Du eigentlich recht weit kommen :-)

      Wo würdest Du den Opera platzieren?

      Vielen Dank
      cheers
      kaepten

      1. Tag

        Wo würdest Du den Opera platzieren?

        Hm ... der läßt sich bestimmt irgendwie über navigator.AppName oder Navigator.Name rausfinden ?!

        Ciao,

        Harry

  2. Meine altgediente Browserweiche funzt nicht mehr so richtig mit NS6 Opera etc. Diese Browserweiche prüfte nur auf appName, habe aber damit nicht die besten Erfahrungen gemacht und suche drum eine Weiche die mit den Objekten (layer, document.all etc) arbeitet. Hat jemand eine Quelle wo man sich über aktuelle Code-Schnippsels und Ideen informieren kann?

    Bei einer Browserweiche sollte man sinnvollerweise fragen, warum die Weiche genutzt werden soll.

    Wenn's darum geht, dem Mac-IE, Mac-NS, PC-IE, PS-NS und "anderen" Browsern ein maßgeschneidertes Stylesheet zu präsentieren, ist die Frage nach dem User-Agent gerechtfertigt. Denn nur so kann man die Plattformen erkennen, und nur so weiß man, daß man da einen IE oder NS vorliegen hat.

    Wenn's darum geht, mit gewissen Objekten gewisse Layer etc. zu manipulieren, dann sollte man die Abfrage auf Vorhandensein der Objekte machen - das funktioniert dann meist auch mit anderen, kompatiblen Browsern. Opera kann z.B. auch document.all, wenn er im IE-Modus arbeitet. Er kann immer document.getElementById (genauso wie der IE5+).

    Im Prinzip brauchst du drei Abfragen:
    <script ...>
    ns4 = (document.layers)? true:false
    ie4 = (document.all)? true:false
    v6 = (document.getElementById)? true:false
    </script>

    Wenn du die Verzweigungen im Code dann mit if/elseif erstellst, bist du auf der sicheren Seite, auch wirklich nur EINE Variante auszuführen (denn IE5+ ist sowohl ie4, als auch v6).

    Zuviele Erkennungsfälle sind nicht unbedingt wünschenswert, denn die muß man ja alle programmtechnisch abfangen und behandeln. Macht in der Regel viel Arbeit. ;)

    - Sven Rautenberg