Показать сообщение отдельно
  #7 (permalink)  
Старый 10.04.2018, 00:25
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

j0hnik, слишком очевидный вариант, не подойдёт, так как у меня iframe будет изолирован через sandbox.

рони,

(function() {

	var frame = document.createElement('iframe');
	frame.sandbox = 'allow-scripts';

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

	frame.onload = function() {
		write(`
			<script>
				setInterval(function() {
					document.write('<div>Line ' + index++ + '</div>');
				}, 1000);
			<\/script>
		`);
		setTimeout(function() {
			write('<div><b>Bold line</b></div>');
		}, 3000);
	};

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

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

})();


Вот тут наглядно видно, что первый write срабатывает и начинает бесконечно отрабатывать интервал, переменная index прибавляется. А значит, окружение не меняется, физически остаётся всё то же самое. Непонятно только одно, почему contentWindow становится другой.
index ведь остаётся, а куда тогда пропадает обработчик message?
Ответить с цитированием