Добавить тег скрипта из массива

1

Можно ли добавить 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);
}
  • 1
    документ готов недостаточно?
  • 0
    Я не вижу, как document.ready помогает в этом сценарии. Я знаю, что есть событие onload для элемента script, но, похоже, оно не срабатывает.
Показать ещё 1 комментарий
Теги:

1 ответ

0
Лучший ответ

Наконец, я получил его работу с кодом ниже.

Надеюсь, это поможет кому-то другому.

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);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню