iframe 中的超时导致滚动问题

timeout in iframe causes scroll issues

所以我在网站上嵌入了一个 iframe,其中运行了一个简单的秒表。它无非是递归超时。然而,在那里进行的重复 DOM 更改导致父网站的内容 'flicker' 和内部 iframe 网站跳转到顶部。由于会立即跳转到页面顶部,因此无法在 iframe 内容上滚动。

这个问题似乎只出现在移动浏览器中(在 iOS Safari 10.3.2 中测试),而间隔的持续时间是无关紧要的(仅每秒调用时同样的问题)。

递归超时

$('#starttimer').on('click', function(e) {
    loopTimer = function() {
        setTimeout(function() {
            $('#time').text('change');  /* DOM modifications seem to be the guilty part */
            loopTimer();
        }, 1);
    }
    loopTimer();
});

有没有人遇到过类似的问题,或者有人知道如何解决这个问题吗?

好的,正如我已经提到的,这似乎是重绘 iframe 内容的问题,它只出现在 iOS Safari 浏览器(和移动 Chrome 浏览器)中。

问题是浏览器在以某种方式更改内容后无法重新计算 iframe 的高度。要解决这个错误,我所要做的就是

A: 要么在 iframe 的 html 和主体上分配 100% 的高度并使其能够溢出。

html,
body {
    height: 100%;
    overflow: auto;
    -webkit-overflow-scrolling: touch;
}

B: 或使用 javascript 计算外部 iframe 的高度,并在内部内容发生变化时将值作为 inline-style 写入 iframe 元素。

我希望这篇文章对那些为这个 iOS 错误而苦苦挣扎的人有所帮助。干杯。