parsek
@parsek

Как подгрузить кусок HTML с последующим выполнением скриптов в нём?

Хочу оптимизировать сайт для повышения скорости его загрузки. Как подгружать отдельно скрипт или кусок JS кода в интернете инструкций много. Но мне надо загрузить целый кусок HTML содержащий в себе как разметку так и скрипты. Там содержится Yandex.Metrika, Global site tag и JivoSite. Может ещё что добавится.

Пробую вот так:
window.setTimeout(function() {
	fetch("/js/").then(function (response) {
		response.text().then(function (text) {
			let div = document.createElement('div');
			div.innerHTML = text;
			document.getElementsByTagName("body")[0].append(div);
		});
	});
}, 2000);


Кусок кода подгружается и замечательно вставляется. Но вот JS не выполняется. Есть у кого готовые решения на этот случай?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
@grek_cheburek
Программист самоучка
jquery это умеет. Но если вы боитесь об него руки пачкать, тогда вам нужно находить скрипты, и создавать их заново в действующей странице.
У вас есть index.html и content.html
В content.html есть какой-то скрипт между тегами
Вам нужно получить данные между этими тегами. Далее создать на странице index.html новый элемент с именемscript и вставить в .innertext или в .innerHTML данные из скрипта, который находится в content.html
Но я бы на вашем месте так бы не парился, ибо jquery это очень хорошо выполняет за вас.
И да, лучше переместите все скрипты из страниц в файл .js
Так код отлаживать лучше и загружаться будет один раз в index.html
А там хоть content.html вызывайте, хоть какой другой файл, браузер будет распознавать как надо.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@MrColdCoffee
web
Найти в подгруженном коде"<script>"ы
затем создать элемент(ы) скрипт:
document.createElement('script')
вставить текст скрипта в содержимое или ссылку в атрибут
Затем заменить найденный на созданный
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Ох не стоит оптимизировать сайт при помощи fetch-запросов, которые не подразумевают какого-либо кэширования. Если очень хочется - используйте <script>, который будет добавлять в страницу HTML, но ни как не fetch, предназначенный для подгрузки динамических данных!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы