Обнаружить, если страница закончила загрузку
Есть ли способ обнаружить, когда страница закончила загрузку, т.е. все ее содержимое, 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
}
Ответ 9
var pageLoaded=0;
$(document).ready(function(){
pageLoaded=1;
});
Использование jquery: https://learn.jquery.com/using-jquery-core/document-ready/
Ответ 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');
});