Самый хороший способ подгрузки яваскриптов – тегом script

Использовали мы на проекте одну лебедевскую библиотеку — include.js. Умеет она интересные вещи, вроде последовательной загрузки зависимых библиотек в нужном порядке. Нужно в яваскрипте написать js.include( ‘my/coolwiidget’ );. Работает она, если на пальцах, следующим образом: делается ajax-запрос, которым грузится текст нужного скрипта, потом ищутся в тексте все js.include, делается их подгрузка, после чего делается eval полученных текстов в обратном порядке. При этом ещё и отсекаются попытки по несколько раз грузить один и тот же яваскрипт.
Работал он очень неплохо, хотя и неудобно было в firebug-е искать скрипт по его имени.
Основная проблема встала, когда стало нужно вынести все яваскрипты на отдельный домен. Вот тут-то и проявились проблемы — ajax-ом нельзя грузить код с других доменов. Помогает заголовок Access-Control-Allow-Origin, но его понимают только современные браузеры (к примеру, firefox с версии 3.5), а на проекте критична максимально возможная совместимость (как обычно и бывает). Так что этот способ может быть актуален года через 3-5.
Посмотрели на другие способы, в итоге пришли к динамическому добавлению тега script в head, но особого смысла в этом нет, т.к. зависимости, для которых и городился изначально огород, при этом способе не отслеживаются (JSONP с колбэками не подошёл, т.к. в проекте много legacy-кода, который использует глобальные переменные, причём даже не как константы).
В итоге было принято гениальное в своей простоте решение — отказаться от всех этих изысков нафик и грузить скрипты как раньше — при загрузке страницы.

LEAVE A COMMENT