11

Как запустить JavaScript после загрузки страницы?

14

Я выполняю внешний скрипт, используя тег <script> внутри <head>.

Проблема в том, что скрипт исполняется до полной загрузки страницы, и я не могу получить доступ к <body> и другим элементам. Мне нужно выполнить некоторый JavaScript после того, как документ был "загружен" (HTML полностью скачан и находится в памяти). Существуют ли события, к которым я могу подключиться при выполнении моего скрипта, чтобы они срабатывали при загрузке страницы?

5 ответ(ов)

2

Можно использовать следующий код для установки функции, которая будет выполняться при загрузке страницы, без зависимости от какого-либо фреймворка и с хорошей переносимостью:

if(window.attachEvent) {
    window.attachEvent('onload', yourFunctionName);
} else {
    if(window.onload) {
        var curronload = window.onload;
        var newonload = function(evt) {
            curronload(evt);
            yourFunctionName(evt);
        };
        window.onload = newonload;
    } else {
        window.onload = yourFunctionName;
    }
}

Этот код проверяет, поддерживает ли браузер метод attachEvent. Если поддерживает, то он использует его для привязки вашей функции к событию загрузки. В противном случае он проверяет, существует ли уже функция, назначенная на событие onload. Если такая функция существует, он создаёт новую функцию, которая сначала вызывает старую, а затем вашу функцию. Если onload ещё не задан, он просто назначает вашу функцию. Это обеспечивает корректную работу на различных браузерах.

1

Вы можете использовать атрибут "onload" внутри тега <body> следующим образом:

<body onload="myFunction()">

Если вы используете jQuery, вы можете реализовать это так:

$(document).ready(function(){ /* код здесь */ });

или

$(window).load(function(){ /* код здесь */ });

Надеюсь, это ответит на ваш вопрос.

Обратите внимание, что $(window).load будет выполняться после полной загрузки документа на вашей странице.

0

Посмотрите на использование события onload для документа или в jQuery используйте $(document).ready(...) вместо $(document).load(...), так как последний метод считается устаревшим. Событие onload сработает, когда весь контент страницы загружен, а метод ready в jQuery позволяет вам выполнять скрипты, как только DOM доступен, что часто бывает раньше, чем загружены все изображения и ресурсы. Вот пример:

// Vanilla JavaScript
window.onload = function() {
    // Ваш код здесь
};

// jQuery
$(document).ready(function() {
    // Ваш код здесь
});

Это обеспечит правильное выполнение вашего кода, как только структура документа будет подготовлена.

0

В вашем вопросе приведен код на JavaScript и jQuery, который обрабатывает события загрузки страницы. Давайте разберем детально оба примера.

JavaScript

В приведенном коде используются события readystatechange, чтобы реагировать на изменения состояния готовности документа:

document.addEventListener('readystatechange', event => { 

    // Когда HTML/DOM элементы готовы:
    if (event.target.readyState === "interactive") { // аналогично: ..addEventListener("DOMContentLoaded")..
        alert("hi 1");
    }

    // Когда окно загружено (внешние ресурсы тоже загружены - `css`, `src` и т.д.)
    if (event.target.readyState === "complete") {
        alert("hi 2");
    }
});
  1. interactive — это состояние, когда DOM полностью загружен и доступен, но внешние ресурсы (например, изображения, стили) еще могут загружаться.
  2. complete — это состояние, когда полностью загружены как DOM, так и все внешние ресурсы.

jQuery

В jQuery аналогичные события обрабатываются с помощью методов .ready() и .load():

$(document).ready(function() { // также как: $(function() { 
    alert("hi 1");
});

$(window).load(function() {
    alert("hi 2");
});
  1. $(document).ready(...) — этот метод будет вызван, когда DOM полностью загружен, аналогично interactive в JavaScript.
  2. $(window).load(...) — этот метод срабатывает, когда загружены все ресурсы окна (например, все изображения и стили).

Важно!

Обратите внимание на примечание: не используйте конструкцию document.onreadystatechange = ..., потому что это перезаписывает другие аналогичные объявления и может привести к потере функциональности.

Если у вас возникнут дополнительные вопросы по работе с событиями загрузки страницы, не стесняйтесь задать их!

0

На некоторых более сложных страницах я замечал, что не все элементы успевают загрузиться к моменту срабатывания события window.onload. Если это так, вы можете добавить setTimeout перед вызовом вашей функции, чтобы немного задержать выполнение. Это не самый элегантный способ, но это простой хак, который работает.

Ваш код:

window.onload = function(){ doSomethingCool(); };

можно изменить на:

window.onload = function(){ setTimeout( function(){ doSomethingCool(); }, 1000); };

Таким образом, функция doSomethingCool будет вызвана через 1 секунду после загрузки страницы, что даст время для полной загрузки всех элементов.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь