2014-12-04 2 views
6

Here говорят, что есть 4 readyState возможных значений для HTML документов:window.onload против сценария отложить

неинициализированных - Не начали загрузку еще
загрузки - Загрузка
интерактивный - загружено достаточно и пользователь может взаимодействовать с ним
завершена - Полностью загруженный

Here говорят, что в принципе, отложить говорит браузеру ш ait "пока он не будет готов" перед выполнением javascript в этом блоке скрипта. Обычно это после того, как DOM закончил загрузку и document.readyState == 4

Итак, вопрос, что выполняется первым и почему - сценарий < сценарий defer src = "..." > или window.onload = function() {...}?

ответ

11

Читать дальше http://www.w3.org/html/wg/drafts/html/master/scripting-1.html#attr-script-defer:

Есть три возможных режима, которые могут быть выбраны с помощью этих атрибутов. Если присутствует атрибут async, тогда скрипт будет , выполненный асинхронно, как только он будет доступен. Если атрибут async нет, то присутствует атрибут defer, тогда скрипт выполняется, когда страница закончила разбор. Если атрибут присутствует, тогда сценарий извлекается и выполняется , прежде чем пользовательский агент продолжит разбор страницы.

http://www.w3.org/TR/html5/syntax.html#the-end говорит вам, что отсроченные скрипты запуска первого:

...
Выполнить первый сценарий в списке сценариев, которые будут выполнены, когда документ завершения разбора.
...

Тогда DOMContentLoaded событие:

очереди задача стрелять простое событие, пузырьки с именем DOMContentLoaded в документе.

load события пожар после обоих из них, всегда.

+0

Благодарим вас за подробный ответ. Не могли бы вы объяснить, почему событие DOMContentLoaded отсутствует в моем списке? –

+2

@PashaTurok: Ваш список - это список 'readyState', а не события. 'DOMContentLoaded' запускается между' 'interactive '' и' 'complete' '; см. шаги 1, 4 и 7 раздела «Конец». – Ryan

Смежные вопросы