Предполагается ли, что документ готов к работе в IE?

Я делаю небольшой фреймворк для JavaScript по разным причинам, включая обучение.

Поэтому я хотел реализовать функциональность "готовность к документам", и поэтому я решил проверить, как подделывается jQuery. DOMContentLoaded на IE < 9.

Проблема в том, что она не работает так, как должна. Проверьте эту скрипку в IE8 и хорошем браузере.

Логика такова: примените css, чтобы сделать начало div красным, затем "готовым" - синим, а при загрузке - зеленым. Кроме того, есть три тега img с поддельными URL-адресами, поэтому между готовностью и загрузкой существует искусственная задержка.

Что должно произойти:
Div не должен отображаться красным больше, чем на долю секунды, если вообще. В идеале первое, что нужно увидеть, должно быть синим. Затем, когда браузер отключил недействительные изображения, зеленый.

Что происходит на IE8:
Div остается красным, пока все изображения не "загрузятся" (в этом синтетическом примере, timeout), затем станет зеленым.

Опять же, я не совсем спрашиваю о исправлении, я спрашиваю, правильно ли для фреймворка вести себя так в IE8 (меня больше не волнует IE 6-7), или это происходит из-за того, что я неправильно использую jQuery.

PS: я знаю, как связать событие вручную, я спрашиваю больше о том, ожидается ли это / приемлемо / ошибка / моя ошибка.

1 ответ

Решение

Я собираюсь пойти работать как задумано.

JQuery использует document.readyState для браузеров, которые не поддерживают DOMContentLoaded, document.readyState только равняется complete когда ресурсы страницы будут загружены.

https://developer.mozilla.org/en-US/docs/DOM/document.readyState

Вероятно, есть веская причина, почему они не делают это в "интерактивном режиме", но я не уверен в этом.

Изменить: вот ваша обновленная скрипка с событием на document.readyState == интерактив

http://jsfiddle.net/PFWmS/7/

Работает как в IE7, так и в IE8

редактировать

Причина, по которой jQuery не использует "интерактивный", заключается в том, что он слишком рано запускается в IE9.

http://bugs.jquery.com/ticket/12282

Я думаю, что может быть лучший способ справиться с тем, что приводит к правильной синхронизации IE7 и 8, при этом все еще работает должным образом в IE9

Другие вопросы по тегам