Javascript: Как определить, что страница на данный момент уже была загружена

2011-12-09

Часто возникает потребность начать выполнение скрипта после загрузки документа. В этом случае нужно назначить обработчик на событие onload объекта window. Но если обработчик события будет назначен позже чем оно произойдет, то этот обработчик никогда не отработает. По-этому следует проверять, загружен ли документ уже, и если да, то можно выполнять обработчик немедленно, иначе — можем смело назначать событие, не опасаясь, что оно никогда не выполнится.

Делается это с помощью свойства readyState объекта document, который хранит состояние готовности документа. Значение «complete» означает, что документ уже загружен.

Упрощённый пример может выглядеть примерно так:

// Если документ уже загружен
if (document.readyState === "complete") {
// то выполняем нашу функцию немедленно
myHandler();
} else {
// иначе - назначаем функцию в качестве обработчика для события загрузки документа
window.onload = myHandler;
}

где myHandler — это функция, которая должна выполнится после полной загрузки документа.

Примечание: в предыдущем примере есть опасность перетереть чужие обработчики событий при загрузке документа, по-этому более корректно писать так:

if (document.readyState === "complete") {
myHandler();
} else {
if("addEventListener" in w) { // для всех браузеров, кроме старых версий IE
window.addEventListener( "load", myHandler, false);
} else if ("attachEvent" in w) { // для старых версий IE
window.attachEvent("onload", myHandler);
}
}



Один комментарий на «Javascript: Как определить, что страница на данный момент уже была загружена»

  1. Vlad:

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

Добавить комментарий