Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   fetch() загрузка и скрытое событие (https://javascript.ru/forum/events/79301-fetch-zagruzka-i-skrytoe-sobytie.html)

vaisan 21.01.2020 16:24

Либо я, либо Вы не поняли. простой клик типа: onclick="javascript: alert('OK');" срабатывает, но если вызовете функцию onclick="javascript:myFynk();" описанную на подгружаемой странице , она не работает

Malleys 21.01.2020 16:30

Manyasha, не следует использовать этот элемент не по назначению. Используйте вместо этого <iframe>.

vaisan, hyvää päivää!. Вам следует вставить элемент на страницу и выполнить скрипты
function XHR(filename) {
	fetch(filename).then(function (response) {
		return response.text();
	}).then(function(code) {
		var document = new DOMParser().parseFromString(code, "text/html");
		return document.documentElement;
	}).then(function(documentElement) {
		var ds = document.getElementById("divSource");
		ds.textContent = "";
		ds.appendChild(documentElement);
		Array.from(documentElement.querySelectorAll("script"))
			.forEach(function(script) {
				setTimeout(eval, 0, script.textContent);
			});
	});
};


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

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

vaisan 21.01.2020 18:44

Moi, professori Malleys
Paljon kiitoksia!!!
Невероятно, но Ваш код сработал.
Правильно ли я понимаю, что нужен двойной проход по загружаемому файлу:
1. загрузка только html элементов
и затем
2. загрузка всех скриптовых
и если нужны css, то
3. загрузка стилевых элементов

Меня только немного смутила в Вашем коде чистка ds.textContent = "";
Разве при этом не удалится содержимое innerHtml/

Malleys 21.01.2020 19:19

vaisan, функция, которую я вам писал, загружает HTML-документ и помещает её на страницу (вместе со всеми картинками, скриптами, стилями и пр.). Всё применяется кроме скриптов, которые объявлены <script>-ом.

Поэтому после того, как документ помещён на страницу, там нужно найти все скрипты и выполнить их. (В примере сделано при помощи eval)

Цитата:

Сообщение от vaisan
загрузка стилевых элементов

Стили применяются так и так!

Цитата:

Сообщение от vaisan
Меня только немного смутила в Вашем коде чистка ds.textContent = "";

Если такое не сделать, то новое содержимое добавится к тому, что уже есть в элементе divSource.

Цитата:

Сообщение от vaisan
Разве при этом не удалится содержимое innerHtml/

Да! Старое удаляется, новое добавляется.

Цитата:

Сообщение от vaisan
Moi, professori Malleys
Paljon kiitoksia!!!

Olen iloinen voidessani auttaa sinua! Itse asiassa puhun viroa, mutta tämä suomi on erittäin ymmärrettävä. Terveisiä Virosta!

ksa 22.01.2020 07:11

Цитата:

Сообщение от Manyasha
а чем плох тег object?

Теги они не плохие и не хорошие... У них есть синтаксис и некое описание из букваря про их назначение и поведение на странице...

vaisan 24.01.2020 15:53

Оказалось что срабатывает не
documentElement.children[0].style.backgroundColor = "#FFFFCC";//или
documentElement.firstChild.style.backgroundColor = "#FFFFCC"; //children[0] = head
,
а этот код
documentElement.children[1].style.backgroundColor = "#FFFFCC";  // children[1] = body


Часовой пояс GMT +3, время: 14:24.