@Drovosek01

Почему не работает document.onload и зачем он вообще нужен?

Код, для примера:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <h1>Документ</h1>
<script>
    document.onload = function(){console.log('Документ загружен');}
</script>
</body>
</html>

Если сохранить этот код в html файл, а потом открыть его в браузере и посмотреть в DevTools, то там ничего не будет. Я уже нагуглил, что вместо этого можно использовать обработчик window.onload и что лучше использовать метод addEventListener.

Вопросы:
1. Почему функция, присвоенная document.onload не срабатывает? В понимании разработчиков браузеров, документ страницы загружается бесконечно?
2. Зачем нужен обработчик document.onload, если он не работает?
3. Насколько правильно вешать функцию на обработчик события window.onload или window.addEventListener('load',function(){...})? Есть ли какие-нибудь альтернативы или более правильный подход выполнить действия, когда все ресурсы на странице загрузятся?
  • Вопрос задан
  • 266 просмотров
Пригласить эксперта
Ответы на вопрос 3
AleksandrB
@AleksandrB
Совсем недавно вывел "Hello world"
Читайте

DOMContentLoaded – браузер полностью загрузил HTML и построил DOM-дерево.
load – браузер загрузил все ресурсы.

DOMContentLoaded – означает, что все DOM-элементы разметки уже созданы, можно их искать, вешать обработчики, создавать интерфейс, но при этом, возможно, ещё не догрузились какие-то картинки или стили.
load – страница и все ресурсы загружены, используется редко, обычно нет нужды ждать этого момента.
Ответ написан
dom1n1k
@dom1n1k
Вероятно, в таком вырожденном примере событие успевает наступить раньше, чем вы повесите на него обработчик. Добавьте пару картинок, причем не локальных, а из интернета.
Ответ написан
Stalker_RED
@Stalker_RED
1, 2, срабатывает, время конечно (если страница не бесконечная)
3. addEventListener лучше хотя-бы потому, что их можно несколько навесить. На какое именно событие вешать зависит от того, когда вы хотите выполнить скрипт.

Когда вы устанавливаете этот обработчик, документ УЖЕ загружен, потому он и не срабатывает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы