Контекст о том, как вы используете эту функцию loadScript, ускользает от меня и выглядит гораздо более запутанным, чем, вероятно, должно быть.
Если вы хотите загружать скрипты по порядку, почему бы вам просто не составить их список в том порядке, в котором вы хотите их загрузить, загрузите первый. Когда он завершит загрузку, обновите ваш список, чтобы удалить только что загруженный и загрузить следующий, и т.д ...
Вот некоторый код, который может это сделать и должен работать с любым из механизмов обнаружения загрузки скриптов, которые используют браузеры, и будет ожидать вызова функции onload (или уведомления readystatechange) до загрузки следующего скрипта:
function loadScriptsSequential(scriptsToLoad) {
function loadNextScript() {
var done = false;
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.onreadystatechange = function () {
if (this.readyState == 'complete' || this.readyState == 'loaded') {
scriptLoaded();
}
}
script.onload = scriptLoaded;
script.src = scriptsToLoad.shift(); // grab next script off front of array
head.appendChild(script);
function scriptLoaded() {
// check done variable to make sure we aren't getting notified more than once on the same script
if (!done) {
script.onreadystatechange = script.onload = null; // kill memory leak in IE
done = true;
if (scriptsToLoad.length != 0) {
loadNextScript();
}
}
}
}
loadNextScript();
}
var scripts = [a,b,c,d,e,f]; // scripts to load in sequential order
loadScriptsSequential(scripts);
Как уже упоминалось, есть очень полезные фреймворки (например, jQuery), которые имеют встроенные функции для загрузки скриптов.