Дополнительно
window.onload vs document.onload
Что более широко поддерживается: window.onload
или document.onload
?
647
8
Что более широко поддерживается: window.onload
или document.onload
?
Когда они стреляют?
window.onload
В некоторых браузерах он теперь берет на себя роль
document.onload
и запускается, когда DOM также готов.document.onload
Насколько хорошо они поддерживаются?
window.onload
представляется наиболее широко поддерживаемым. Фактически, некоторые из самых современных браузеров в некотором смысле заменилиdocument.onload
на window.onload`.Проблемы с поддержкой браузера, скорее всего, являются причиной того, что многие люди начинают использовать библиотеки, такие как jQuery, для обработки проверки готовности документа, например:
Для целей истории.
window.onload
vsbody.onload
:Общая идея заключается в том, что window.onload запускает , когда окно документа готово к презентации , и document.onload запускает , когда DOM дерево (построенное из кода разметки в документ) завершен .
В идеале, подписка на мероприятия DOM-дерева позволяет осуществлять манипулирование за кадром через Javascript, что приводит к почти отсутствию загрузки процессора . Наоборот,
window.onload
может потратить некоторое время на запуск , когда несколько внешних ресурсов еще не запрошены, проанализированы и загружены.►Тестовый сценарий:
Чтобы заметить разницу и как ваш браузер по выбору обращений вышеупомянутых обработчиков событий , просто вставьте следующий код в документ - `` < body > ``` - тег.
►Результат:
Вот результирующее поведение, наблюдаемое для Chrome v20 (и, вероятно, большинства современных браузеров).
`document.onload
`событие.` `onload
`` < body > ```
, один раз при объявлении внутри `< > ``` '(где событие затем действует как ```
document.onload``` `).` window.onload
в пределах элемента HTML-`` < head > ```.►Пример проекта:
Приведенный выше код взят из кодовой базы этот проект (
index.html
и `` keyboarder.js```).Список обработчиков событий оконного объекта см. В документации MDN.
Добавить слушателя событий
& Лт; hr >
Обновление марта 2017 года
1 Ванильный JavaScript
& Лт; hr >
2 jQuery
& Лт; hr > Удачи.
Согласно Перенос документов HTML - конец,
Браузер анализирует источник HTML и запускает отложенные сценарии.
DOMContentLoaded
отправляется вдокумент
, когда весь HTML проанализирован и запущен. Событие пузырится на «окно».Браузер загружает ресурсы (например, изображения), которые задерживают событие загрузки.
Событие
load
отправляется вwindow
.Следовательно, порядок исполнения будет
DOMContentLoaded
window
на этапе захватаDOMContentLoaded
документа`DOMContentLoaded
window
в фазе пузыряload
слушатели событий (включаяonload
обработчик событий)window
Никогда не следует вызывать пузырьковый прослушиватель событий
load
(включая обработчик событийonload
) вdocument
. Можно вызывать только слушателей захватаload
, но из-за загрузки субресурса, такого как таблица стилей, а не из-за загрузки самого документа.& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
& Лт;!- конец фрагмента - >
В Chrome window.onload отличается от
< body onload = "" >
, тогда как они одинаковы как в Firefox (версия 35.0), так и в IE (версия 11).Вы можете исследовать это по следующему фрагменту:
И вы увидите как «загруженное окно» (которое приходит первым), так и «загрузку тела» в консоли Chrome. Тем не менее, вы увидите только «загрузку тела» в Firefox и IE. Если вы запустите «'window.onload.toString ()`» на консолях IE & FF, вы увидите:
что означает, что назначение "window.onload = функция (e)..."записано.
window.onload
иonunload
являются ярлыками дляdocument.body.onload
иdocument.body.onunload
обработчик
document.onload
иonload
на всех тегах html, кажется, зарезервирован, но никогда не запускается«onload» в документе - > правда
window.onload однако они часто одно и то же. Точно так же body.onload становится window.onload в IE .
Однако Window.onload является стандартом - веб-браузер в PS3 (на основе Netfront) не поддерживает объект окна, поэтому вы не можете использовать его там.