Самый простой способ, за исключением библиотеки JS, - сделать XMLHttpRequest и eval () возвращаемым.Ваша «загрузка» будет при возврате данных, а «oninit» будет сразу после того, как вы eval'd.
РЕДАКТИРОВАТЬ: Если вы хотите упорядочить это, вы можете создать AssetLoader, который принимаетмассив сценариев и не будет выполнять eval () сценарий, пока предыдущий не будет выбран и инициализирован.
РЕДАКТИРОВАТЬ 2: Вы также можете использовать материал script.onload в сообщении, указанном в комментариях.Метод eval имеет небольшое преимущество в том, что вы можете разделять и контролировать части загрузки и выполнения импорта скрипта.
РЕДАКТИРОВАТЬ 3: Вот пример.Рассмотрим файл с именем foo.js, который содержит следующее:
function foo () {
alert('bar');
}
Затем выполните следующую команду на другой странице вашего браузера:
function initScript (scriptString) {
window.eval(scriptString);
}
function getScript (url, loadCallback, initCallback, callbackScope) {
var req = new XMLHttpRequest();
req.open('GET', url);
req.onreadystatechange = function (e) {
if (req.readyState == 4) {
if (loadCallback) loadCallback.apply(callbackScope);
initScript.call(null, req.responseText);
if (initCallback) initCallback.apply(callbackScope);
}
}
req.send();
}
function fooScriptLoaded () {
alert('script loaded');
}
function fooScriptInitialized () {
alert('script initialized');
foo();
}
window.onload = function () {
getScript('foo.js', fooScriptLoaded, fooScriptInitialized, null);
}
Вы увидите оповещения "скрипт загружен", "скрипт инициализирован" и "бар".Очевидно, что реализация XMLHttpRequest здесь не завершена, и есть много всего, что вы можете сделать для любой области, в которой вы хотите выполнить скрипт, но это является его ядром.