Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Обработчик загрузки DOM (DOMContentLoaded)
Самый простой способ вызова, это onload, но проблема в том, что обработчик onload сработает, когда загрузится весь документ, все картинки и внешние объекты. И если объект находится на недоступном сервере, то onload может и не вызваться.
При использовании готовых библиотек, это обычно обрабатывается вызовом $(document).ready.
Если Вы не используете сторонние библиотеки, а хотите реализовать это на чистом JavaScript и при этом обеспечить кроссбраузерность (работу во всех браузерах), то вам пригодится эта универсальная функция, которую можно смело вынести во внешний script-файл.
Исходный код этого примера:
<script>
var funcDomReady='';
function onDomReady(func) { // функция добавления события
var oldonload = funcDomReady;
if (typeof funcDomReady != 'function')
funcDomReady = func;
else {
funcDomReady = function() {
oldonload();
func();
}
}
}
// добавляем функцию, которую нужно вызвать после загрузки DOM
onDomReady(alert("DOM загружен! Обработчик 1"));
onDomReady(alert("DOM загружен! Обработчик 2"));
function init() {
// выходим, если функция уже выполнялась
if (arguments.callee.done) return;
// устанавливаем флаг, чтобы функция не исполнялась дважды
arguments.callee.done = true;
if(funcDomReady)funcDomReady(); // вызываем всю цепочку обработчиков
};
/* для Mozilla/Firefox/Opera 9 */
if (document.addEventListener)
document.addEventListener("DOMContentLoaded", init, false);
/* для Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=\"__ie_onload\" defer=\"defer\" src=\"javascript:void(0)\"><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
if (this.readyState == "complete")
init();}; // вызываем обработчик для onload
/*@end @*/
/* для Safari */
if (/WebKit/i.test(navigator.userAgent)) { // условие для Safari
var _timer = setInterval(function() {
if (/loaded|complete/.test(document.readyState)) {
clearInterval(_timer);
init(); // вызываем обработчик для onload
}
}, 10);
}
/* для остальных браузеров */
window.onload = init;
</script>
И на закуску красивое простое решение:
function ready(cb) {
/in/.test(document.readyState) ? setTimeout(ready.bind(null, cb), 9) : cb();
}
ready(function(){ console.log("The DOM is ready"); });
.
Прокомментировать/Отблагодарить