Что более широко поддерживается: window.onload
или document.onload
?
javascript
event-handling
dom-events
Крис Балланс
источник
источник
window
события:onload
иDOMContentLoaded
. Пример использования :,window.addEventListener('DOMContentLoaded', callback)
. По состоянию на середину 2019 года, совместим со всеми основными браузерами. ----- developer.mozilla.org/en-US/docs/Web/API/Window/… ------ developer.mozilla.org/en-US/docs/Web/API/Window/load_eventwindow.onload
иdocument.onload
это отличается друг от друга!window.onload
кажется, имеет место потом и немного загружен, чемdocument.onload
! (Некоторые вещи работают с окном, которое не работает с документом! Это также относится и к document.onreadstatechange 'complete'!)Ответы:
Когда они стреляют?
window.onload
В некоторых браузерах теперь он берет на себя роль
document.onload
и запускается, когда DOM также готов.document.onload
Насколько хорошо они поддерживаются?
window.onload
кажется наиболее широко поддерживаемым. Фактически, некоторые из самых современных браузеров в некотором смысле замененыdocument.onload
наwindow.onload
.Проблемы поддержки браузера, скорее всего, являются причиной того, что многие люди начинают использовать библиотеки, такие как jQuery, для обработки проверки готовности документа, например:
Для истории.
window.onload
противbody.onload
:источник
window.onload
и<body onload="">
который совершенно отличается (и «отдельная структура от действия» имеет гораздо больше смысла в этом контексте). Не то, чтобы ответ был неправильным, но основа этого есть.document.onload
это JS-эквивалент jQuerydocument.ready
?Общая идея заключается в том, что window.onload запускается, когда окно документа готово к представлению, а document.onload запускается, когда дерево DOM (построенное из кода разметки в документе) завершено .
В идеале, подписка на события дерева DOM позволяет осуществлять манипуляции за экраном через Javascript, практически не загружая процессор . Наоборот,
window.onload
может потребоваться некоторое время для запуска , когда несколько внешних ресурсов еще не запрошены, проанализированы и загружены.►Тестовый сценарий:
Чтобы увидеть разницу и то, как выбранный вами браузер реализует вышеупомянутые обработчики событий , просто вставьте следующий код в
<body>
тег - - вашего документа .►Result:
Вот результирующее поведение, наблюдаемое для Chrome v20 (и, вероятно, большинства современных браузеров).
document.onload
событийonload
срабатывает дважды при объявлении внутри<body>
, один раз при объявлении внутри<head>
(когда событие действует какdocument.onload
).window.onload
обработчик события в пределах HTML-<head>
элемента.► Пример проекта:
Код выше взят из кодовой базы этого проекта (
index.html
иkeyboarder.js
).Список обработчиков событий объекта window приведен в документации MDN.
источник
Добавить прослушиватель событий
Update March 2017
1 Ванильный JavaScript
2 jQuery
Удачи.
источник
window.addEventListener('load', function() {...})
? Я также обновил свой ответ.В соответствии с анализом HTML-документов - конец ,
Браузер анализирует исходный код HTML и запускает отложенные сценарии.
A
DOMContentLoaded
отправляется в тот момент,document
когда весь HTML был проанализирован и запущен. Событие пузырится наwindow
.Браузер загружает ресурсы (например, изображения), которые задерживают событие загрузки.
load
Событие отправляется наwindow
.Следовательно, порядок исполнения будет
DOMContentLoaded
слушатели событийwindow
в фазе захватаDOMContentLoaded
слушатели событийdocument
DOMContentLoaded
слушатели событийwindow
в фазе пузыряload
прослушиватели событий (включаяonload
обработчик событий)window
load
Слушатель пузырькового события (включаяonload
обработчик события)document
никогда не должен вызываться.load
Могут быть вызваны только прослушиватели захвата , но из-за загрузки подресурса, такого как таблица стилей, а не из-за загрузки самого документа.источник
document - load - capture
это действительно происходит, что противоречит тому, что я ожидал в своем поиске, почему загрузка документов не происходит для меня. Странно, это противоречиво. Иногда это появляется, иногда нет, иногда появляется дважды - но никогда неdocument - load - bubble
бывает. Я бы предложил не использоватьdocument load
.load
событие отправляется на внешние ресурсы. Это событие не всплывает, поэтому оно обычно не обнаруживается в документе, но оно должно быть на этапе захвата. Эти данные относятся к нагрузке из<style>
и<script>
элементов. Я думаю, что Edge подходит для того, чтобы показывать их, а Firefox и Chrome не правы.useCapture
вариант научил меня чему-то новому.В Chrome, window.onload отличается
<body onload="">
, тогда как они одинаковы как в Firefox (версия 35.0), так и в IE (версия 11).Вы можете исследовать это следующим фрагментом кода:
И вы увидите как «окно загружено» (что идет первым), так и «тело загружено» в консоли Chrome. Тем не менее, вы увидите только «тело загрузки» в Firefox и IE. Если вы запустите "
window.onload.toString()
" в консолях IE & FF, вы увидите:Это означает, что назначение "window.onload = function (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) не поддерживает объект окна, поэтому вы не можете использовать его там.
источник
Короче говоря
windows.onload
это не поддерживается IE 6-8document.onload
не поддерживается ни одним современным браузером (событие никогда не запускается)Показать фрагмент кода
источник