2009-03-27 4 views
5

Meine Website hat viele Stylesheets für unterschiedliche Bildschirmbreiten angepasst. Wenn die Größe des Browsers geändert wird, überprüft das Ereignis window.onresize, ob eine Größenänderung tatsächlich stattgefunden hat, indem Sie document.documentElement.clientWidth betrachten. Wenn dies der Fall ist, werden nacheinander größere Stylesheets aktiviert, bis Bildlaufleisten angezeigt werden. Dann werden sie in umgekehrter Reihenfolge deaktiviert, bis die Bildlaufleisten verschwinden. Bildlaufleisten werden erkannt, indem offsetWidth mit scrollWidth verglichen wird.Wie kann ich erkennen, ob das Fenster im IE8-Standards-Modus wirklich skaliert wurde?

In IE8 sind zwei neue Probleme mit der Erkennung einer Größenänderung verbunden. One, onresize wird ausgelöst, wenn Bildlaufleisten ein- oder ausgeblendet werden, und zwei, d.DE.clientWidth, geben die Breite ohne Bildlaufleisten an, eine Unterbrechung von IE7 und allen anderen Browsern. Meine Site wird jetzt häufig in einer Schleife gefangen, in der die Onresize-Logik ein größeres Stylesheet aktiviert, das Scrollbalken erzeugt, das dann ein anderes Resize-Ereignis auslöst, das nicht herausgefiltert werden kann, weil sich die clientWidth geändert hat, weil Scrollbalken erscheinen oder verschwinden. Dies wäre ein trivialer Fehler, wenn IE8 etwas wie outwardWidth hätte, das ich überprüfen könnte.

Antwort

3

Da ich noch nie in einem Browser mit der Generierung von Scrollbar-Generierungs-Triggern gearbeitet hatte, war mir nicht klar, dass das Überprüfen der d.dE.clientWidth keine gute Verifizierung war und die Scrollbars nie beinhaltete. Ich überprüfe stattdessen d.d.offsetWidth und die wiederholten onresize-Ereignisse werden herausgefiltert.

1

Sie sind sich dessen sicher bewusst - und es beantwortet nicht wirklich Ihre Fragen, da es IE8 aus dem Standardmodus herauszwingt - aber die schnelle Lösung wäre force IE8 into IE7 mode using an HTTP header.

+0

Dies wäre eine gute Lösung, wenn IE7-Kompatibilitätsmodus nicht Grenz-Kollaps und Hover-Regressionen eingeführt, die viel zu hässlich sind, um zu umgehen. – Lucent

Verwandte Themen