当标签处于非活动状态时,iOS 5会暂停JavaScript

时间:2011-11-02 07:50:45

标签: javascript ipad ios5 mobile-safari

我遇到了iOS 5特有的问题,相同的代码适用于ios 4.X和其他桌面浏览器。

我每隔几秒就使用JavaScript做一些事情,现在问题是当我切换到iPad safari中的另一个标签时,这个脚本停止工作。

当我切换回此标签时,它会再次开始工作。

您可以在此页面上重现, http://www.w3schools.com/js/tryit.asp?filename=tryjs_timing_infinite

访问此链接,单击开始计数,然后转到其他浏览器选项卡。当您在几秒钟后返回此选项卡时,您会注意到当选项卡未激活时计数器没有增加。

我认为Apple这样做是为了提高性能。有人可以建议一个解决方案来使它工作,我完全坚持这个问题?

4 个答案:

答案 0 :(得分:6)

如果您有一个计数器,而不是将其递增1秒,则存储“开始时间”,然后计算自该开始时间以来的计数。你仍然会每秒都这样做,但它会从暂停期间恢复过来。

<div id="counter"></div>
<script>
var startTime = new Date();

var updateCounter = function () {
    var displayArea = document.getElementById("counter");
    var currentTime = new Date.now();
    var differenceInSeconds = Math.round((currentTime - startTime) / 1000);
    displayArea.innerHTML = differenceInSeconds ;
}

window.setInterval(updateCounter, 1000);
</script>

See the working example on JS Fiddle

<强>更新

我刚刚在运行IOS5的iPad2上进行了测试,它肯定会暂停在非活动标签中执行JavaScript。你将无法阻止这种行为,你只需要使用它。

View the test page on JS Fiddle

答案 1 :(得分:1)

对于iOS 5来说,这不是什么新鲜事。移动版Safari已经始终暂停了非活动标签的javascript执行。我知道这是因为我在网页中保存了一两年前地理定位坐标的运行记录。

答案 2 :(得分:0)

当我打开新标签时我在iPad上遇到了一个问题我无法抓住焦点&#39;事件所以在找到合适的事件后我发现你可以使用:&#34; pageshow&#34;

祝你好运!!!

答案 3 :(得分:0)

为什么你不能尝试 - 检查当前的浏览器标签是否有效,并根据这个条件做你的事情。看这是最好的解决方案

Is there a way to detect if a browser window is not currently active?

但我不确定它对ios浏览器是否有用。