Показать сообщение отдельно
  #12 (permalink)  
Старый 10.04.2018, 09:35
Аватар для brizing
Интересующийся
Отправить личное сообщение для brizing Посмотреть профиль Найти все сообщения от brizing
 
Регистрация: 08.02.2014
Сообщений: 23

Сообщение от ruslan_mart
подвох в том, что при document.write - window как-то обнуляется, т.е. ссылка на него остаётся та же, но он рефрешится. А все глобальные переменные остаются на месте.
Документ перезаписывается.
Обработчик события висит на документе, так что он пропадает.
Можно заново назначать обработчик.

(function() {

	var frame = document.createElement('iframe');

	var write = function(content) {
		frame.contentWindow.postMessage(content, '*');
	};

	frame.onload = function() {
		write('<div>Line 1</div>');
		write('<div>Line 2</div>');
	};

	frame.src = 'data:text/html,' + encodeURIComponent(`
		<script>
			var onMessage = function onMessageFn (event) {
				console.log(event.data);
				document.write(event.data);
				window.onmessage = onMessageFn;
			};
			window.onmessage = onMessage;
		<\/script>	
	`);

	document.addEventListener('DOMContentLoaded', function() {
		document.body.appendChild(frame);
	});

})();
Ответить с цитированием