Javascript.RU

Выполнение javascript скрипта после загрузки страницы. Как проверить что сайт загрузился?

Написав вот такой код на сайте, мы неприменно заметим что он выдет ошибку...
Почему возникает ошибка, ведь код правильный?

<script type="text/javascript">
function olyx() {
	document.getElementById('baran').innerHTML='ну ты и баран';
}
olyx();
</script>

<div id="baran"></div>

Этот вопрос очень часто задают новички.
На самом деле ошибка возникает из за того что скрипт выполняется раньше чем создается элемент baran

Чтобы все заработало нужно поменять их местами

<div id="baran"></div>

<script type="text/javascript">
function olyx() {
	document.getElementById('baran').innerHTML='ну ты и баран';
}
olyx();
</script>

Но это допотопный способ не всегда удобен и практичен.

Некоторые умудряются переписать пример примерно вот так

<script type="text/javascript">
function olyx() {
	document.getElementById('baran').innerHTML='ну ты и баран';
}
window.onload = function () {
	olyx();
}
</script>

<div id="baran"></div>

Чтож в этом случае функция olyx() вызовется после загрузки документа.
Но представте что на странице сайта куча картинок, которые грузятся пол часа.
И что нам ждать пол часа пока загрузятся картинки чтобы вызвать функцию???
Да это маразм полнейший.
ведь на сайте вместо картинок могут быть счетчики посещений который дадут такой же эффект длительного простаивания.

К счастью выход есть.

Посмотрим как можно обойтись без маразмов, для этого перед тегом head подключим scriptjava фреймворк

<script type="text/javascript" src="http://scriptjava.net/source/scriptjava/scriptjava.js"></script>

Теперь перепишем первый пример но уже в нормальном исполнении

<script type="text/javascript">
function olyx() {
	$$('baran','ну ты и баран');
}

//выполнение кода только после загрузки документа
$$r(function() {
	//тут пишем все что хотим чтобы выполнилось после загрузки документа
	olyx();
}); 

</script>

<div id="baran"></div>

Как видите код заметно сократился, а все то что нужно чтобы выполнилось после загрузки документа мы прописали тут

$$r(function() {
	//тут пишем все что хотим чтобы выполнилось после загрузки документа
	olyx();
});

Отличие этого кода от window.onload заключается в том, что мы не будем дожидаться загрузки картинок, а лиш дождемся полной загрузки документа - html кода и скриптов.

-7

Автор: k1801 (не зарегистрирован), дата: 15 февраля, 2013 - 16:53
#permalink

Мне кажется, или...
Эта библиотека грузится дольше, чем самая большая страничка на моем сайте вместе со всеми картинками и прочим?)))


Автор: FANTOM22A, дата: 14 декабря, 2013 - 01:09
#permalink

а как же помещать джаваскрипт по правилам надо в хеад, а див в хеад не пропишешь раньше джаваскрипта


Автор: Гость (не зарегистрирован), дата: 7 января, 2014 - 00:57
#permalink

да уж...


Автор: CrazyMihey (не зарегистрирован), дата: 22 февраля, 2014 - 05:31
#permalink

Я сделал так:

<Head>
  <Script Defer Type="Text/JavaScript" Src="JS/ContentsBuilder.JS"></Script>
</Head>

(тут ключевое слово Defer)
Вроде, работает нормально (FF, WebKit, IE), то есть JavaScript, который ползает по DOM срабатывает сразу, а потом Картинки подтягиваются. Единственное, что Script валяется в отдельном Файле, где ему, кстати и место.
Если имеются возражения против такого метода — в Студию!


 
Поиск по сайту
Другие записи этого автора
gordon freeman
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Популярные таги
Последние темы на форуме
Forum