当Tab未激活时,iOS 5暂停JavaScript [英] iOS 5 pauses JavaScript when tab is not active
问题描述
我有一个特定于 iOS 5 的问题,相同的代码适用于 ios 4.X 和其他桌面浏览器.
我每隔几秒就使用 JavaScript 做一些事情,现在问题是当我在 iPad Safari 中切换到另一个标签时,这个脚本停止工作.
当我切换回这个标签时,它又开始工作了.
您可以在此页面上复制它,http://www.w3schools.com/js/tryit.asp?filename=tryjs_timing_infinite
访问此链接,单击开始计数,然后转到其他浏览器选项卡.几秒钟后返回此选项卡时,您会发现该选项卡未处于活动状态时计数器并未增加.
我认为 Apple 这样做是为了提高性能.有人可以建议一个解决方案来使它工作吗,我完全被这个问题困住了?
如果您有一个计数器,与其每秒钟递增 1,不如存储开始时间",然后计算自该开始时间以来的计数.您仍然会每秒执行此操作,但它会从暂停期中恢复.
<脚本>var startTime = new Date();var updateCounter = 函数 () {var displayArea = document.getElementById("counter");var currentTime = new Date.now();var differenceInSeconds = Math.round((currentTime - startTime)/1000);displayArea.innerHTML = differenceInSeconds ;}window.setInterval(updateCounter, 1000);
更新
我刚刚在运行 IOS5 的 iPad2 上进行了测试,它肯定会在非活动选项卡中暂停 JavaScript 的执行.您将无法阻止这种行为,您只能应对它.
I have a problem specific to iOS 5 and same code works in ios 4.X and other desktop browsers.
I am using JavaScript to do some stuff every few seconds, now the problem is when I switch to another tab in iPad safari, this script stops working.
When I switch back to this tab, it starts working again.
You can reproduce it on this page, http://www.w3schools.com/js/tryit.asp?filename=tryjs_timing_infinite
Visit this link, click on start counting, and go to some other browser tab.when you come back to this tab after few seconds you will notice counter did not increase when the tab was not active.
I think Apple has done this to improve performance. Can someone suggests a solution to make it work, I am totally stuck on this issue?
If you have a counter, rather than increment it by 1 ever second, store the "start time" and then calculate the count since that start time instead. You would still do this every second, but it would recover from a period of pausing.
<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
UPDATE
I have just tested on an iPad2 running IOS5 and it definitely pauses execution of JavaScript in inactive tabs. You won't be able to prevent this behaviour, you will just have to work with it.
View the test page on JS Fiddle
这篇关于当Tab未激活时,iOS 5暂停JavaScript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!