Общая идея заключается в том, что 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