Обнаружить, если страница закончила загрузку

Есть ли способ обнаружить, когда страница закончила загрузку, т.е. все ее содержимое, javascript и такие активы, как css и изображения?

так:

if(PAGE HAS FINISHED LOADING)
{
// do something amazing
}

а также, если страница загружается более 1 минуты, выполните следующее:

if(PAGE HAS BEEN LOADING FOR 1 MIN)
{
// do something else amazing
}

Я видел такие сайты, как Apple MobileMe, которые делают подобные проверки, но не смогли понять это в своих огромных библиотеках кода.

Может ли кто-нибудь помочь?

Спасибо

EDIT: Это, по сути, то, что я хочу сделать:

// hide content
$("#hide").hide();

// hide loading
$("#loading").hide();

// fade in loading animation
setTimeout($('#loading').fadeIn(), 200);

jQuery(window).load(function() {
  $("#hide").fadeIn();

  $("#loading").fadeOut(function() {
    $(this).remove();
    clearInterval(loadingAnim);
  });

  setTimeout(function() {
    $("#error").fadeIn();
  }, 60000);
});

Ответ 1

jQuery(window).load(function () {
    alert('page is loaded');

    setTimeout(function () {
        alert('page is loaded and 1 minute has passed');   
    }, 60000);

});

Или http://jsfiddle.net/tangibleJ/fLLrs/1/

См. также http://api.jquery.com/load-event/ для объяснения в jQuery (окне).load.

Обновление

Подробное объяснение того, как работает загрузка javascript, и два события DOMContentLoaded и OnLoad можно найти на этой странице.

DOMContentLoaded: при работе DOM. Способ jQuery для захвата этого события: jQuery(document).ready(function () {});.

OnLoad: когда DOM готова и все активы - это включает в себя изображения, iframe, шрифты и т.д. -, и вращающееся колесо/часовой класс исчезают. Способ jQuery для захвата этого события - вышеупомянутый jQuery(window).load.

Ответ 2

есть два способа сделать это в jquery в зависимости от того, что вы ищете.

с помощью jquery вы можете сделать

  • //это будет ждать загрузки текстовых ресурсов до вызова этого (dom.. css.. js)

    $(document).ready(function(){...});
    
  • //это будет ждать завершения всех изображений и текстовых активов перед выполнением

    $(window).load(function(){...});
    

Ответ 3

Это называется loadload. DOM ready был создан по той причине, что onload ждал изображения. (Ответ, полученный от Matchu по близкому вопросу некоторое время назад.)

window.onload = function () { alert("It loaded!") }

onload ожидает всех ресурсов, которые являются частью документа.

Ссылка на вопрос, где он объяснил все это:

Нажмите меня, вы знаете, что хотите!

Ответ 4

Я думаю, что самый простой способ -

var items = $('img, style, ...'), itemslen = items.length;

items.bind('load', function(){ 
    itemslen--;
    if (!itemlen) // Do stuff here
});

ИЗМЕНИТЬ, чтобы быть немного сумасшедшим:

var items = $('a, abbr, acronym, address, applet, area, audio, b, base, ' + 
    'basefont, bdo, bgsound, big, body, blockquote, br, button, canvas, ' + 
    'caption, center, cite, code, col, colgroup, comment, custom, dd, del, ' +
    'dfn, dir, div, dl, document, dt, em, embed, fieldset, font, form, frame, ' +
    'frameset, head, hn, hr, html, i, iframe, img, input, ins, isindex, kbd, ' +
    'label, legend, li, link, listing, map, marquee, media, menu, meta, ' +
    'nextid, nobr, noframes, noscript, object, ol, optgroup, option, p, ' +
    'param, plaintext, pre, q, rt, ruby, s, samp, script, select, small, ' + 
    'source, span, strike, strong, style, sub, sup, table, tbody, td, ' + 
    'textarea, tfoot, th, thead, title, tr, tt, u, ul, var, wbr, video, ' + 
    'window, xmp'), itemslen = items.length;

items.bind('load', function(){ 
    itemslen--;
    if (!itemlen) // Do stuff here
});

Ответ 5

Еще один вариант, который вы можете проверить document.readyState, например,

var chkReadyState = setInterval(function() {
    if (document.readyState == "complete") {
        // clear the interval
        clearInterval(chkReadyState);
        // finally your page is loaded.
    }
}, 100);

Из документации на странице readyState сводка полного состояния

Возвращает "загрузку" во время загрузки документа, "интерактивный" после его загрузки закончен синтаксический анализ, но по-прежнему загружает субресурсы и "завершает", после его загрузки.

Ответ 6

Один из вариантов заключается в том, чтобы страница была пустой, содержащей небольшое количество javascript. Используйте script, чтобы сделать вызов AJAX, чтобы получить фактическое содержимое страницы, и чтобы функция успеха записывала результат по текущему документу. В функции тайм-аута вы можете "сделать что-то еще удивительное"

Приблизительный псевдокод:

$(document).ready(function(){
    $.ajax
      url of actual page
      success:do something amazing
      timeout: do something else
});

Ответ 7

Без jquery или что-нибудь подобное, почему бы и нет?

var loaded=0;
var loaded1min=0;
document.addEventListener("DOMContentLoaded", function(event) {
   loaded=1;
    setTimeout(function () {
      loaded1min=1;
    }, 60000);
});

Ответ 8

Это то, что вы имели в виду?

$("document").ready( function() {
    // do your stuff
}

Ответ 10

FYI людей, которые задали в комментариях, это то, что я действительно использовал в проектах:

function onLoad(loading, loaded) {
    if(document.readyState === 'complete'){
        return loaded();
    }
    loading();
    if (window.addEventListener) {
        window.addEventListener('load', loaded, false);
    }
    else if (window.attachEvent) {
        window.attachEvent('onload', loaded);
    }
};

onLoad(function(){
   console.log('I am waiting for the page to be loaded');
},
function(){
    console.log('The page is loaded');
});