Можно ли добавить javascript в DOM из массива ниже в цикле, чтобы при загрузке скриптов [0] загружались скрипты [1] и т.д.
var scripts = [["external", "https://code.jquery.com/jquery-3.2.1.min.js"],
["internal", "$('body').append('hello world');"],
["internal", "//some javascript code"],
["external", "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"]];
Ниже мой текущий код
for ( var i = 0; i < scripts.length; i++ ) {
var script = document.createElement("script");
script.type = "text/javascript";
if ( scripts[i][0] == "external" ) script.src = scripts[i][1];
if ( scripts[i][0] == "internal" ) script.innerHTML = scripts[i][1];
document.getElementsByTagName("head")[0].appendChild(script);
}
Наконец, я получил его работу с кодом ниже.
Надеюсь, это поможет кому-то другому.
var urls = [
"https://code.jquery.com/jquery-3.2.1.min.js",
"$('body').append('hello world');",
"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js",
"console.log('hi there');"];
var i = 0;
var recursiveCallback = function() {
if (i++ < urls.length - 1) {
loadScript(urls[i], recursiveCallback)
} else {
alert('All scripts loaded successfully!');
}
}
loadScript(urls[0], recursiveCallback);
function loadScript(url, callback) {
var script = document.createElement("script");
script.type = "text/javascript";
if (script.readyState) { // Internet Explorer
script.onreadystatechange = function() {
if (script.readyState == "loaded" ||
script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
} else {
script.onload = function() {
callback();
};
}
if ( url.substring(0, 4) == "http" ) {
script.src = url;
} else {
script.innerHTML = url;
callback();
}
document.getElementsByTagName("head")[0].appendChild(script);
}