Как я могу определить, действительно ли окно изменилось в стандартном режиме IE8? - PullRequest
5 голосов
/ 27 марта 2009

На моем сайте есть много таблиц стилей, настроенных для различной ширины экрана. При изменении размера браузера событие window.onresize проверяет, действительно ли произошло изменение размера, просматривая document.documentElement.clientWidth. Если это так, он включает последовательно большие таблицы стилей, пока не появятся полосы прокрутки. Затем он отключает их в обратном порядке, пока полосы прокрутки не исчезнут. Полосы прокрутки обнаруживаются при сравнении offsetWidth с scrollWidth.

В IE8 две новые проблемы мешают обнаружению изменения размера. Во-первых, onresize запускается всякий раз, когда полосы прокрутки появляются или исчезают, а во-вторых, d.dE.clientWidth сообщает ширину без полос прокрутки, отрыв от IE7 и всех других браузеров. Мой сайт теперь часто попадает в цикл, в котором логика onresize активирует большую таблицу стилей, которая создает полосы прокрутки, которые затем запускают другое событие изменения размера, которое нельзя отфильтровать, потому что clientWidth изменился из-за появления или исчезновения полос прокрутки. Это было бы тривиальным исправлением, если бы в IE8 было что-то наподобие externalWidth, которое я мог бы проверить.

Ответы [ 2 ]

3 голосов
/ 27 марта 2009

Поскольку я никогда не имел дело с генерацией полосы прокрутки, запускающей onresize в любом браузере, я не осознавал, что проверка d.dE.clientWidth не была хорошей проверкой и фактически никогда не включала полосы прокрутки. Теперь я проверяю d.dE.offsetWidth, и повторяющиеся события onresize отфильтровываются.

1 голос
/ 27 марта 2009

Вы почти наверняка знаете об этом - и он на самом деле не отвечает на ваши вопросы, поскольку вынуждает IE8 выйти из режима стандартов - но быстрое решение состоит в том, чтобы перевести IE8 в режим IE7 с помощью заголовка HTTP .

...