Recently tested if JavaScript running in a iFrame would block JavaScript from running in the parent window.
iFrame on same domain as parent:
- Chrome 68.0.3440.84: Blocks
- Safari 11.0.2 (13604.4.7.1.3): Blocks
- Safari 15.1 on iOS: Blocks
- Firefox 96: Blocks
iFrame on different domain as parent
- Chrome 68.0.3440.84: Doesn’t block
- Safari 11.0.2 (13604.4.7.1.3): Blocks (outdated, but I don’t have a macbook)
- Safari 15.1 on iOS: Doesn’t block
- Firefox 96: Doesn’t block
- Chrome for Android 96: sometimes Blocks and sometimes Doesn’t block (There are some complex rules in Chrome for Android that determine when Chrome for Android does and doesn’t isolate a process, see
chrome://process-internals
andchrome://flags
)
parent.html:
<body>
<div id="count"></div>
<iframe src="./spin.html"></iframe>
<script>
let i = 0;
let div = document.getElementById("count");
setInterval(() => {
div.innerText = i++;
}, 100);
</script>
</body>
spin.html:
<body>
<button id="spin">spin</button>
<script>
const spin = document.getElementById("spin");
spin.addEventListener('click', () => {
const start = Date.now();
while (Date.now() - start < 1000) { }
})
</script>
</body>