Событие onload, которое вызывается для выполнения каких-либо действий при загрузке страницы, не всегда дает желаемые результаты. Проблемы здесь кроются в том, что это событие вызывается в том момент, когда страница загрузилась целиком, включая все изображения, флэш анимацию и т.п. Иногда более подходящим моментом для выполнения манипуляция с DOM является момент полной загрузки структуры документа DOM, когда с ней уже можно работать. Чтобы определить этот момент, можно воспользоваться следующим методом:
function domReady( f ) {
if ( domReady.done ) return f();
if ( domReady.timer ) {
domReady.ready.push( f );
} else {
if (window.addEventListener)
window.addEventListener('load',isDOMReady, false);
else if (window.attachEvent)
window.attachEvent('onload',isDOMReady);
domReady.ready = [ f ];
domReady.timer = setInterval( isDOMReady, 13 );
}
}
function isDOMReady(){
if ( domReady.done ) return false;
if ( document && document.getElementsByTagName && document.getElementById && document.body ) {
clearInterval( domReady.timer );
domReady.timer = null;
for ( var i = 0; i < domReady.ready.length; i++ )
domReady.ready[i]();
domReady.ready = null;
domReady.done = true;
}
}
Функция isDOMReady() последовательно обращается к объектам и свойствам document, document.getElementsByTagName document.getElementById и document.body при помощи функции setTimeout() до тех пор, пока структура DOM не будет полностью загружена. Чтобы выполнить какую-либо функцию при загрузке DOM, добавьте её или ссылку на неё как аргумент в функцию domReady():
domReady(function(){alert('hello');});
