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?