@Roweb
Верстальщик

Как заставить нормально работать динамически подключенный js код?

Динамически подключаю js скрипты с помощью appendChild.
var jq = document.createElement('script');
		jqt.src = "js/jquery-3.3.1.min.js";
		document.querySelector('body').appendChild(jq);

		var script = document.createElement('script');
		script.src = "js/scripts.js";
		document.querySelector('body').appendChild(script);
Сначала jquery, затем пользовательский файл. Код по видимому не исполняется в порядке подключения. Сначала исполняется scripts, потом jquery. Как это исправить?
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
var jq = document.createElement('script');
jq.src = "js/jquery-3.3.1.min.js";
document.querySelector('body').appendChild(jq);

jq.onload = e => {
    var script = document.createElement('script');
    script.src = "js/scripts.js";
    document.querySelector('body').appendChild(script);
};
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@nandeaitsurawapinku
может быть Promise, но тогда вам придётся забирать скрипты как текст и вставлять в тег скрипт и после уже добавлять следующий.
Просто добавить тег скрипт с сылкой на jquery не получится так как вы не можете контролировать когда он загрузится

fetch('js/jquery-3.3.1.min.js')
.then(function(response) {
   // создать тег script и положить в него response
}).then(function(myBlob) {
   // после чего выполнить 
    var script = document.createElement('script');
    script.src = "js/scripts.js";
    document.querySelector('body').appendChild(script);
});


или же

var jq = document.createElement('script');
    jqt.src = "js/jquery-3.3.1.min.js";
    document.querySelector('body').appendChild(jq);

var interval = setInterval(function() {
   if(window.jquery) {
     clearInterval(interval)
      var script = document.createElement('script');
      script.src = "js/scripts.js";
      document.querySelector('body').appendChild(script);
  }
}, 100)

первое решение мне нравится больше

p.s
возможно ещё defer сработает если добавить к тегам
Ответ написан
Комментировать
alex-1917
@alex-1917
Если ответ помог, отметь решением
Слить два файла в один что не позволяет? Или кто?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы