// codeart.ru / Теория программирования / Динамическая загрузка скриптов и callback Форум

Динамическая загрузка скриптов и callback rss подписка

Автор: Evgeniy Sergeev

Появилась у меня простенькая задача — после загрузки модулей Снапа вызвать callback функцию. Для Огнелиса и Оперы тупо использовал событие onload. Код примерно такой:

var s = document.createElement( ‘script’ );
s.src = ‘la-la-la.js’;
s.onload = function() { …. }

Под Ослика пришлось, как всегда, подшаманить. Особенность загрузки моего Снапика заключается в том, что он активируется уже после того как основная страница загружена. В сети существует множество хаков, которые как раз направлены на то, чтобы отследить момент загрузки страницы, но для моего случая они не подходят. Кроме этого, мне не хотелось, чтобы модули Снапа содержали какой-либо дополнительный код, позволяющий определить момент загрузки. В итоге, после продолжительных размышлений, я остановился на следующем варианте:

var s = document.createElement( ‘script’ );
s.src = ‘la-la-la.js’;
s.onreadystatechange = function(){ if (/loaded|complete/.test(this.readyState)) { … } }

Кстати, когда я захотел привязаться к наличию onload:

if( typeof s.onload == ‘undefined’ ) { … }

оказалось, что конструкция подходит только для Оперы, а Огнелис упорно считает, что у него нет атрибута onload, хотя замечательно с ним работает.

Не знаю, на сколько мое решение удачно. Возможно, ты знаешь более интересный ход? Тогда расскажи о нем в комментариях!

  1. Несколько интересных блогов для вас...и для нас | Alpha-Beta-Release Blog
  2. codeart.ru » Нашел скрипт jsLoader
  1. Оффтоп — не хочешь поставить себе что-то для подсветки синтаксиса? Все-таки ужасно не читабельно выходит.

  2. покапай кишки jquery (: там все крайне кроссборузерно, плоть до сафари.

  3. Дима, jquery смотрел, я его чуть ли не наизусть уже знаю. Но фишка в том, что он ждет только загрузки DOM элементов, т.е. самой страницы, а не дополнительных скриптов. Вообщем то, что я описал в посте, частично выдрано из jquery.

    Может кто подскажет более оригинальное решение.

Leave a Reply

« »