#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? это происходит именно при загрузке страницы