Выполнение 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 кода и скриптов.
|
Ох, заминусовал бы.
полная чушь!Лучше сказал бы как без всяких библиотек это делается.
А эта статья
Мне кажется, или...
Эта библиотека грузится дольше, чем самая большая страничка на моем сайте вместе со всеми картинками и прочим?)))
Автор бредил ИМХО. Чего стоят только его примеры (баран, олух...).
Выполнить скрипт после загрузки DOM легко, если дописать в тег onLoad='load();'.
onload - это для тех кто ничего не понимает
посмотрите исходники библиотек яндекса, вконтакте, jquery
там как у меня все написано и знаете почему так?
Код $$r не дожидается загрузки изображений и флеша
когда у вас на странице стоит чужой счетчик и код который сильно тормозит
window.onload сработает только когда этот код загрузится
счетчики иногда грузятся по 5 минут, пользователь не будет ждать ваш onload и не увидет эффектов на странице
Из текста я понял, что все, кто не юзают библиотеку scriptjava - маразматики. weeeell
а как же помещать джаваскрипт по правилам надо в хеад, а див в хеад не пропишешь раньше джаваскрипта
да уж...
Я сделал так:
(тут ключевое слово Defer)
Вроде, работает нормально (FF, WebKit, IE), то есть JavaScript, который ползает по DOM срабатывает сразу, а потом Картинки подтягиваются. Единственное, что Script валяется в отдельном Файле, где ему, кстати и место.
Если имеются возражения против такого метода — в Студию!
defer - отложенная загрузка. js не блокирует рендеринг html. И может загрузиться после нужного элемента, а может и раньше, если страница допустим большая а js маленький. Статья полная херня загрузить какой-то плагин чтобы загрузить свой скрипт
Имхо defer Решает - Статья гавно и чушь, автор мудак, было, потс и гей.
fsdf
Roksa ostrow wielkopolski
Roksa zg
Emi roksa
Roksa katowice koszutka
Roksa pl kutno
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.