Как я могу запустить скрипт полученный через fetch?

Добрый день, как я могу запустить скрипт полученный через fetch. Грубо говоря, я имею вот такой код
const response = await fetch('/index.php?route=product/compare/add',
            {
                method: 'POST',
                body: data,
                type: 'json'
            }
        );
        const info = await response.json();
        let el = document.createElement('div');

        el.classList.add('wrapperMiniCard')
       el.innerHTML= info.tpl;
        document.querySelector('header').append(el)


Внутри info.tpl у меня разметка в которой есть тег script и код этого скрипта я хочу запустить
  • Вопрос задан
  • 599 просмотров
Пригласить эксперта
Ответы на вопрос 2
zkrvndm
@zkrvndm
Архитектор решений
Попробуйте вот так:
async function getScript() {
	try {
		var response = await (await fetch('/index.php?route=product/compare/add', { method: 'POST', body: data })).json();
		var doc = new DOMParser().parseFromString(reponse.tpl, 'text/html');
		var code = doc.querySelector('script').innerHTML; eval(code);
		console.log("Следующий скрипт успешно выполнен:\n" + code);
	} catch(err) {
		alert('При загрузке скрипта произошла ошибка, детали см. в консоли.');
		console.log('При загрузке скрипта произошла ошибка:');
		console.error(err);
	}
}

getScript();

Однако может не заработать, так как не понятно, что именно вы пытайтесь отправить в переменной data.
Ответ написан
@AlexLF
Посмотрите еще здесь на эту тему - решение без DOMParser:
https://www.cyberforum.ru/javascript-beginners/thr...
Там, правда, речь идет о запуске и html-, и js-кода вместе.

Кстати, можно вставлять код как <template>, там js-код запускается.

...Не получается, попробовал. Если в другом файле, это не HTMLElement, а просто код, который нужно еще .куда-то вставлять. И здесь не обойтись без innerHTML. И js-код из другого файла получается неработающий.

Пока сейчас я обхожусь тем, что делаю два файла - html и js отдельно. Html загружаю и вставляю через innerHTML, а js-файл запускаю через динамический импорт - import('jsAddress'). Работает.
Ответ написан
Ваш ответ на вопрос

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

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