Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проверка загрузки страницы (https://javascript.ru/forum/events/46957-proverka-zagruzki-stranicy.html)

dima_zluka 02.05.2014 00:02

Проверка загрузки страницы
 
Всем привет.

Подскажите как проверить загружена ли страница. Имеется ввиду проверка состояния полной загрузки (как при событии onload) а не DOMReady. Что то на подобии document.readyState только для onload.

Я использую requirejs и зачастую при загрузки модуля событие onload уже произошло, а как проверять загружена ли странница не знаю.

Буду очень признателен за помощь, спасибо.

danik.js 02.05.2014 05:49

А для чего это? Можно пройтись по картинкам и проверить их состояние.

dima_zluka 02.05.2014 14:28

Это нужно для модуля роботы с DOM который можно подключить как просто модуль:
require(['dom'], function (dom) {//...

Или дождаться готовность dom (DOMReady):
require(['dom!ready'], function (dom) {//...

А вот как правильно поверить загрузку страницы не знаю, хочу сделать что то типа:
require(['dom!load'], function (dom) {//...


Проверка состояния всех картинок не подходит потому что:
1) Есть ещё много элементов которые влияют на загрузки страниц типа iframe, embed ...
2) Картинки могут быть установлены как фон или псевдоэлементах

danik.js 02.05.2014 15:25

Если document.readyState == 'complete', то событие window.load уже было.
Скорее всего тут есть проблемы с кроссбраузерностью. Думаю полезно будет посмотреть исходники jQuery.

dima_zluka 02.05.2014 16:25

Я верно понимаю что document.readyState == "interactive" это DOMReady а document.readyState == "complete" это onload. Я не могу найти этому подтверждение, я думал что document.readyState == "complete" это означает что DOM готов.

Насчёт jQuery
$(function () {/*вызовется даже после события готовности DOM*/ });

$(window).load(function () {/* Это событие и оно не вызовется после вызова этого метода */});

Так что можно наводку где искать?

danik.js 02.05.2014 16:48

Цитата:

Сообщение от dima_zluka
Так что можно наводку где искать?

В обработке ready. Там помимо DOMContentLoad еще много чего. В том числе работа с document.readyState и событием window@load.

dima_zluka 02.05.2014 17:58

Там есть только проверка на document.readyState === "complete"
http://code.jquery.com/jquery-1.11.0.js строка 3449
function completed() {
	// readyState === "complete" is good enough for us to call the dom ready in oldIE
	if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
		detach();
		jQuery.ready();
	}
}
Так что наверно document.readyState === "complete" нужен всё таки для DOMReady а не onload.
Может я ошибаюсь поправьте если неправ.

danik.js 02.05.2014 18:31

<script>
	console.log('loading: ' + document.readyState);
</script>
<iframe src="http://javascript.ru" frameborder="0" onload="console.log('iframe@load: ' + document.readyState);"></iframe>
<script>
document.addEventListener('DOMContentLoaded', function() {
	console.log('document@DOMContentLoaded: ' + document.readyState);
});
window.onload = function() {
	console.log('window@load: ' + document.readyState);
};
</script>

dima_zluka 02.05.2014 19:52

Большое спасибо, мне только осталось разобраться с кроссбраузерностью. :thanks:


Часовой пояс GMT +3, время: 09:55.