загрузка скрипта с помощью xhr и его запуск

#javascript #xmlhttprequest

#javascript #xmlhttprequest

Вопрос:

Я пытаюсь загрузить скрипт динамически, но он не работает, что я здесь делаю не так?

 <script>
function loadXMLDoc() {   var xhttp = new XMLHttpRequest();   xhttp.onreadystatechange = function() {     if (this.readyState == 4 amp;amp; this.status == 200) {       document.getElementById("demo").innerHTML =       this.responseText;     }   };   xhttp.open("GET", "haromd.js", true); xhttp.send(); };
loadXMLDoc();
</script> 

<script type="module" id="demo"></script>
  

Файл внешнего скрипта содержит только скрипт, который входит в тег скрипта типа модуля.
Когда тот же скрипт находится в теге script by без xhr, он работает / запускается без каких-либо проблем.

Ответ №1:

Вам нужно будет создать новый элемент скрипта, когда вы получите для него содержимое.

Изменение текста в существующем теге script не выполняет его, но когда новый элемент script вставляется в DOM, он выполняется

Простой пример

 const get_code = (msg) => `console.log('${msg}')`;

// try inserting in existing script element
document.getElementById('existing').textContent = get_code('Existing script tag');
console.log('Nothing prior in console')

// create new script element
const scr = document.createElement('script')
scr.textContent = get_code('New script tag')
document.body.append(scr)  
 <script id="existing"></script>  

Комментарии:

1. на самом деле он выполняется сейчас даже при добавлении его в существующий тег: adambernath.com/lotto/lotto7.html Как мне добавить к нему задержку, чтобы он загружался после полной загрузки страницы? Я хочу отделить его от основного процесса загрузки и выполнить его после того, как он будет завершен в течение нескольких секунд.

2. Создайте элемент и выполните scr.onload = function(){ /* run code*/)

3. я имею в виду, очевидно, не с помощью settimeout

4. Используйте событие загрузки нового элемента скрипта

5. любой другой способ, кроме onload? это происходит именно при загрузке страницы