2009-03-27 8 views
5

Moja witryna ma wiele arkuszy stylów dostosowanych do różnych szerokości ekranu. Podczas zmiany rozmiaru przeglądarki zdarzenie window.onresize sprawdza, czy zmiana rozmiaru rzeczywiście miała miejsce, patrząc na document.documentElement.clientWidth. Jeśli tak, włącza kolejne większe arkusze stylów, aż pojawią się paski przewijania. Następnie wyłącza je w odwrotnej kolejności, dopóki paski przewijania znikną. Paski przewijania są wykrywane przez porównywanie przesunięciawidth do scrollWidth.Jak mogę wykryć, czy okno naprawdę zmieniło rozmiar w trybie standardów IE8?

W IE8 dwa nowe problemy utrudniają wykrywanie zmiany rozmiaru. Po pierwsze, uruchamia onresize, gdy paski przewijania pojawiają się lub znikają, a dwa d.dE.clientWidth zgłasza szerokość bez pasków przewijania, przerwę od IE7 i wszystkich innych przeglądarek. Moja witryna jest teraz często uwięziona w pętli, w której logika onresize aktywuje większy arkusz stylów, który tworzy paski przewijania, które następnie wyzwalają kolejne zdarzenie zmiany rozmiaru, którego nie można odfiltrować, ponieważ zmieniono parametr clientWidth z powodu pojawiania się lub znikania pasków przewijania. Byłoby to banalną poprawką, gdyby IE8 miał coś w rodzaju zewnętrznej Width, którą mógłbym sprawdzić.

Odpowiedz

3

Ponieważ nigdy nie miałem do czynienia z generowaniem pasków przewijania, które powodowało atrapy w dowolnej przeglądarce, nie zdawałem sobie sprawy, że sprawdzenie d.dE.clientWidth nie było dobrą weryfikacją, aw rzeczywistości nigdy nie zawierało pasków przewijania. Teraz sprawdzam teraz d.dE.offsetWidth, a powtarzane zdarzenia onresize są odfiltrowywane.

1

Prawie na pewno jesteś tego świadomy - i to tak naprawdę nie odpowiada na twoje pytania, ponieważ zmusza IE8 z trybu Standardów - ale szybka naprawa to: force IE8 into IE7 mode using an HTTP header.

+0

Byłoby to dobre rozwiązanie, gdyby tryb zgodności IE7 nie wprowadzał zawirowań granic i regresji na hover, które są zbyt brzydkie do obejścia. – Lucent

Powiązane problemy