Прежде, чем вы начнете читать, не проголосуйте меня, это не просто еще один вопрос о window.onload
vs document.onload
.document.onload() странное поведение, несколько вопросов?
window.onload
должен запускаться после полной загрузки всех узлов DOM. document.onload
должен запускаться после того, как все узлы DOM готовы, и он не будет ждать полной загрузки всех активов.
Теперь, если у нас есть что-то подобное с window.onload
:
<!DOCTYPE html>
<html>
<head>
<title>Testing out document.onload and window.onload</title>
<script>
window.onload = function() {
alert('Loaded!');
};
</script>
</head>
<body>
<img src="https://goo.gl/0Oomrw" alt="Heavy image!" />
</body>
</html>
Сценарий будет ждать, пока изображение не будет полностью загружен, а затем вызвать тревогу.
И если у нас есть что-то подобное с document.onload:
<!DOCTYPE html>
<html>
<head>
<title>Testing out document.onload and window.onload</title>
<script>
document.onload = function() {
alert('Loaded!');
};
</script>
</head>
<body>
<img src="https://goo.gl/0Oomrw" alt="Heavy image!" />
</body>
</html>
Ничего не произойдет, и сценарий не будет загружаться вообще, если мы не делаем нашу функцию самостоятельного выполнения, как это:
<!DOCTYPE html>
<html>
<head>
<title>Testing out document.onload and window.onload</title>
<script>
document.onload = function() {
alert('Loaded!');
}();
</script>
</head>
<body>
<img src="https://goo.gl/0Oomrw" alt="Heavy image!" />
</body>
</html>
И теперь скрипт будет работать, но не будет ждать, пока изображение полностью загрузится, как и с window.onload
.
Теперь у меня есть 2 вопроса действительно:
Почему нам нужно создать себя, выполняющие функцию с document.onload и window.onload работает без нашей функции самостоятельно выполняющейся? Он работает так же в новейших версиях Chrome и Firefox, поэтому я предполагаю, как он работает, но почему?
Что действительно происходит с этим кодом после того, как мы назначили document.onload функцию? Я понимаю, что его способ ждать DOM для загрузки. Но мы говорим, что
window.onload = function() { }
Должно ли это сделать окно функцией? Или это окно имеет eventListener, прикрепленный к нему, что вызвано триггером загрузки? Похоже, я ответил на этот вопрос ... :) Это правда?
Спасибо!
_ «А теперь скрипт будет работать» _ - но не так как вы ожидаете, что это - функция называется прямо там, а затем, когда эта часть кода выполняется - она полностью отделена от любого события загрузки. – CBroe
Итак, вы хотите сказать мне, что «document.onload = function() {...}();" начнет сам независимо от того, загружен ли DOM или нет? Зачем тогда document.onload? – JSmurf
_ «Почему document.onload then?» _ - скажите нам, потому что, как уже объяснил Квентин, это из _your_ fantasy ... возможно, использовало 'document.foo = function (...' вместо этого для всего, что имеет значение. – CBroe