IE 7 Beta 2 -- JS Mysterium
MichaelR
- browser
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
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
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
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
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
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
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
Hi,
danke, werde es versuchen, vielleicht beseitigt es ja das Problem.
Grüße
Michael
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
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