Общая идея заключается в том, что window.onload запускается, когда окно документа готово к представлению, а document.onload запускается, когда дерево DOM (построенное из кода разметки в документе) завершено .
В идеале, подписка на события дерева DOM позволяет осуществлять манипуляции за экраном через Javascript, практически не загружая процессор . Наоборот, window.onload
может потребоваться некоторое время для запуска , когда несколько внешних ресурсов еще не запрошены, проанализированы и загружены.
►Тестовый сценарий:
Чтобы увидеть разницу и то, как выбранный вами браузер реализует вышеупомянутые обработчики событий , просто вставьте следующий код в <body>
тег - - вашего документа .
<script language="javascript">
window.tdiff = []; fred = function(a,b){return a-b;};
window.document.onload = function(e){
console.log("document.onload", e, Date.now() ,window.tdiff,
(window.tdiff[0] = Date.now()) && window.tdiff.reduce(fred) );
}
window.onload = function(e){
console.log("window.onload", e, Date.now() ,window.tdiff,
(window.tdiff[1] = Date.now()) && window.tdiff.reduce(fred) );
}
</script>
►Result:
Вот результирующее поведение, наблюдаемое для Chrome v20 (и, вероятно, большинства современных браузеров).
- Нет
document.onload
событий
onload
срабатывает дважды при объявлении внутри <body>
, один раз при объявлении внутри <head>
(когда событие действует какdocument.onload
).
- подсчет и действие в зависимости от состояния счетчика позволяет имитировать оба поведения событий.
- В качестве альтернативы объявите
window.onload
обработчик события в пределах HTML- <head>
элемента.
► Пример проекта:
Код выше взят из кодовой базы этого проекта ( index.html
и keyboarder.js
).
Список обработчиков событий объекта window приведен в документации MDN.
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_event