Асинхронная загрузка и инициализация js скрипта

С тех пор как стало возможным указать загружаемому в HTML документе скрипту флаги-аттрибуты async и defer, стало необходимо понимать то, в какой очередности скрипты будут исполнены, если они зависят друг от друга.

Так если ваш скрипт зависит от jQuery-плагина, а тот в свою очередь от самой библиотеки jQuery, и все они загружаются асинхронно, то гарантировать определенную очередность запуска не возможно.

Необходим механизм запуска одного скрипта, после готовности другого. Я использую следующую snippet-функцию (к сожалению утерял первоисточник откуда взят код), которая реализует данный механизм:

Данная функция позволяет привязать вашу callback функцию к событию готовности скрипта onload.

Обычно библиотека загружается асинхронно, а код, использующий её, идет inline. В таком случае удобно использовать подсистему events.

В примере выше я привязываю последовательный вызов событий leafletIsLoaded и leafletIsCompletelyReady к загрузке библиотеки leaflet.js. Оба события кастомные и могут быть вызваны только принудительно через механизм trigger.

Их я объявляю в произвольном месте как inline код:

Необходимость в цепочки событий может быть обусловлена тем, что вы, к примеру, расширяете функционал (прототип) библиотеки своими методами, а только затем уже можете переходить к использованию библиотеки. Тогда для события leafletIsLoaded вы добавите зацепку вида:

Мало букафф? Читайте есчо !

Формирование связанных списков select произвольной вложенности

Декабрь 11, 2016 г.

Не ослабевает интерес к вопросу о динамическом создании связанных выпадающих HTML списков. Для двух зависимых списков (я публиковал пример более 5 лет назад!) ситуация простая и понятная, но люди задают вопрос - а как развить пример для вложения 3х списков? ...

Читать

Как сделать кликабельные ссылки внутри SVG при использовании Fancybox

Июнь 21, 2025 г.

Когда вы используете Fancybox для отображения изображений, SVG и других медиа-объектов, возникает интересная проблема: если внутри SVG находятся ссылки (<a>), они перестают работать. Почему? Потому что Fancybox «перехватывает» клик, и вы не попадаете ...

Читать

Управление размерами autocomplete ui widget в Drupal

Октябрь 25, 2023 г.

Попался мне UI баг, когда autocomplete слой с результатами поиска оказывался больше по ширине, чем input элемент, к которому он был прикреплен. Не ясен был алгоритм, по которому вычислялась ширина слоя. В одних случаях это происходило корректно, ...

Читать

Прерывание цикла jQuery функции $.each()

Ноябрь 17, 2018 г.

Часто использую функцию jQuery API each(), но иногда требуется досрочно прервать выполнение этого цикла. Итак, как выйти из $.each()? Обработка происходит внутри функции, и на выходе требуется сигнализировать API что делать дальше. Перебор элементов ...

Читать
 

Комментарии к «Асинхронная загрузка и инициализация js скрипта»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: