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

Ani*_*ahu 4 javascript mobile-safari ipad ios5

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

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

当我切换回此选项卡时,它会再次开始工作.

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

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

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

Fen*_*ton 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>
Run Code Online (Sandbox Code Playgroud)

请参阅JS Fiddle的工作示例

UPDATE

我刚刚在运行IOS5的iPad2上进行了测试,它肯定会暂停在非活动选项卡中执行JavaScript.您将无法阻止此行为,您只需使用它即可.

查看JS Fiddle上的测试页面

  • 你的javascript暂停了你猜测的原因:性能.据我所知,没有办法让javascript在后台运行,除非有,所以唯一的方法是围绕它进行编码,以便代码可以从暂停中恢复,就像Sohnee说的那样. (4认同)
  • 好吧,这不是我的问题,我是问为什么当 ipad(ios 5)上的选项卡未激活时我的 JavaScript 会暂停。 (2认同)
  • @AnilShahu答案(包含在我上面的答案中)是你不能改变浏览器的行为,你需要在约束内工作. (2认同)