Предполагается ли, что документ готов к работе в 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 == интерактив
Работает как в IE7, так и в IE8
редактировать
Причина, по которой jQuery не использует "интерактивный", заключается в том, что он слишком рано запускается в IE9.
http://bugs.jquery.com/ticket/12282
Я думаю, что может быть лучший способ справиться с тем, что приводит к правильной синхронизации IE7 и 8, при этом все еще работает должным образом в IE9