MichaelR: IE 7 Beta 2 -- JS Mysterium

Hallo,

Eine von mir geschriebene Webseite, die einige Divs per JavaScript in der Seite positioniert funktioniert mit Firefox und IE 6 einwandfrei; allerdings wurde mir mitgeteilt, dass im IE 7 Preview of Beta 2 das ganze nicht mehr richtig geht.

Es werden besagte Divs mittels folgendem Code vertical auf der Seite positioniert:

// Hilfsfunktion
function Get_PageDim(){
 this.W = 640;
 this.H = 480;
 this.W = document.getElementsByTagName("body")[0].clientWidth;
 this.H = document.getElementsByTagName("body")[0].clientHeight;
 if (B.Gecko){
  this.W = window.innerWidth;
  this.H = window.innerHeight;
  }
}

function Initialize_Page(){
  // hier steht sonstiger Code
  // ...

var pdim = new Get_PageDim();

// position all the divs
        // ...
 TopPos = pdim.H-(Math.floor(pdim.H/5))-20;

// weite runten werden dann die Divs positioniert

}

Im Firefox und anderen Gecko-Browsern als auch dem IE 6 werden die Divs im unteren Fünftel der Seite positioniert.

Der IE 7 allerdings positioniert die Divs im oberen Fünftel der Seite, d.h. also statt dass die Divs unten am Bildschirmrand kleben, kleben sie eben oben am Bildschirmrand.
Die Frage ist nur warum das plötzlich in der neuen IE Version der Fall ist???

Ich würde das gerne selber ausprobieren, aber aus diversen Gründen kann ich den IE 7 wegen des fehlenden Service Packs 2 nicht installieren -- außerdem ist die Größe des SP 2 glaube ich auch ein wenig zu groß für eine Modemverbindung, aber egal.

Also, vielleicht kann mir ja jemand einen Tipp geben woran das Problem liegt.

Danke, Grüße,
Michael

  1. Hallo,

    Nachtrag: B.Gecko in der Hilfsfunktion ist ein Objekt, dass True zurückgibt, falls der Browser einer der Gecko-Browser ist

    Grüße,
    Michael

  2. Hallo MichaelR,

    dass im IE 7 Preview of Beta 2 das ganze nicht mehr richtig geht.

    if (B.Gecko){
      this.W = window.innerWidth;
      this.H = window.innerHeight;
      }

    Man sollte so ja auch nicht unterscheiden. Woran erkennst du denn den Geck-Browser? Wahrscheinlich anhand irgendwelcher Methoden und/oder Eigenschaften, von denen du glaubst, dass nur Gecko-Browser sie kennen, die aber mit deinem Problem, ob sie window.innerWidth und ~Height kennen nichts zu tun haben.

    Wenn nun der IE7 diese von dir willkürlich gewählten Methoden und Eigenschaften dazulernt, heißt das aber doch noch lange nicht, dass er dann plötzlich auch window.innerWidth versteht.

    Frag doch lieber gleich ab, ob der Browser innerWidth versteht.

    Ganz ohne "if" geht das so:

      
    this.W = (window.innerWidth || document.body.clientWidth);  
    
    

    Gruß Gernot

    1. Hallo Gernot,

      danke für Deine Antwort, aber an dem window.innerXYZ liegt es nicht, denn das versteht der IE 7 NICHT -- das hab ich schon getestet.

      Also ist nur die Zeile

      this.H = document.getElementsByTagName("body")[0].clientHeight;

      für die Feststellung der Höhe relevant.

      Soweit ich auf den MS Seiten gesehen habe ist der IE 7 eigentlich hauptsächlich ein Bug-fix Release, von daher sollte ja m. M. nach das meiste was in IE 6 problemlos geht auch da gehen ....

      Grüße,
      Michael

    2. Nachtrag: B.Gecko in der Hilfsfunktion ist ein Objekt, dass True zurückgibt, falls der Browser einer der Gecko-Browser ist

      Hallo,
      wie Gernot schon richtig sagt, falls beim IE7 aber B.Gecko auch true ist, dann wird zwar bei der ersten Abfrage H auf die richtige Höhe gesetzt, allerdings wird direkt dannach H auf undefined gesetzt was bei weiteren Berechnungen dann vermutlich zu 0 führt.
      Teste doch mal die Lösung mit:
      this.H = (window.innerHeight || document.body.clientHeight);

      diese ist "schick" und sollte solange korrekt funktionieren solange ein Browser nicht beide Properties und dann auch noch unterschiedlich implementiert hat.

      Gruß Imre

      1. Hello out there!

        this.H = (window.innerHeight || document.body.clientHeight);

        diese ist "schick" und sollte solange korrekt funktionieren solange ein Browser nicht beide Properties […] implementiert hat.

        Doch, dann funktioniert’s auch; weil, wenn der erste Ausdruck nicht als false interpretiert wird, der zweite gar nicht mehr beachtet wird.

        Es funktioniert jedoch nicht, wenn ein Browser beide Properties nicht implementiert hat.

        See ya up the road,
        Gunnar

        --
        “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
        1. Hallo Gunnar,

          Es funktioniert jedoch nicht, wenn ein Browser beide Properties nicht implementiert hat.

          Ja, deshalb sollte es in Michaels Sinne auch eher heißen:

          this.W = (window.innerWidth || document.body.clientWidth || 640);

          Dabei weiß ich allerdings nicht, warum es in dem Falle, dass ein Browser weder window.innerWidth noch document.body.clientWidth versteht, denn dann ausgerechnet 640 Pixel sein sollen.

          Gruß Gernot

          1. Hi,

            danke, werde es versuchen, vielleicht beseitigt es ja das Problem.

            Grüße
            Michael

  3. hi,

    TopPos = pdim.H-(Math.floor(pdim.H/5))-20;

    // weite runten werden dann die Divs positioniert

    Dabei hast du natürlich eine Einheit an diesen Wert angefügt, wie das in CSS ja schließlich bei allen Längenangaben ungleich Null erforderlich ist - ?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      TopPos = pdim.H-(Math.floor(pdim.H/5))-20;

      // weite runten werden dann die Divs positioniert

      Dabei hast du natürlich eine Einheit an diesen Wert angefügt, wie das in CSS ja schließlich bei allen Längenangaben ungleich Null erforderlich ist - ?

      Ganz genau!

      Grüße,
      Michael