То, что я пытаюсь сделать, это динамически включать один или несколько файлов js из Javascript.Я знаю, что есть множество методов для этого, но я ищу решение, которое следует этим правилам:
1) Не используйте какие-либо фреймворки или библиотеки JS (jQuery, Prototype и т. Д.).
2) Сценарий должен остановить выполнение, пока внешний js-файл не будет полностью загружен и проанализирован браузером.
Рациональным основанием # 2 является то, что внешний js-файл будет включать определения функций, которые необходимо использовать немедленнопосле того, как сценарий включен.Большую часть времени браузер не успел проанализировать файл js, прежде чем я начну вызывать эти функции.
Я не против использовать функцию обратного вызова, чтобы узнать, когда скрипт завершит загрузку, но:
1) Я не знаю заранее, сколько сценариев будет включено динамически, поэтому я не хочу и не могу написать несколько вложенных обратных вызовов.Мне просто нужно знать, когда они все загрузятся.
2) Я формулирую, что попытка использовать какое-то событие «загрузки» для запуска обратного вызова может не работать, если браузер кэшировал JavaScript.
Редактировать Я должен был с самого начала упомянуть, что это для системы плагинов, но я хотел, чтобы мой вопрос / ответ был достаточно общим, чтобы быть полезным для других людей.
Пользователи будут определять, какие плагины они хотят загрузить в массив.
plugins = [ 'FooPlugin', 'BarPlugin' ];
Затем я буду циклически проходить по массиву и загружать сценарий js для каждого плагина:
for(var i = 0; i < plugins.length; i++) {
loadScript('plugins/' + plugins[i] + '.js');
}
Каждый плагин помещает себя в массивloaded_plugins (это пример FooPlugin.js)
load_plugins.push({
name: 'FooPlugin',
// Other plugin methods and properties here
});