【问题标题】:iOS 5 pauses JavaScript when tab is not active当Tab未激活时,iOS 5暂停JavaScript
【发布时间】:2011-12-20 02:26:15
【问题描述】:

我有一个特定于 iOS 5 的问题,并且相同的代码在 ios 4.X 和其他桌面浏览器中运行。

我每隔几秒钟就使用 JavaScript 做一些事情,现在问题是当我在 iPad Safari 中切换到另一个选项卡时,此脚本停止工作。

当我切换回此选项卡时,它又开始工作了。

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

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

我认为 Apple 这样做是为了提高性能。有人可以提出一个解决方案来让它工作吗,我完全被这个问题困住了吗?

【问题讨论】:

  • 我梦想让我的桌面网络浏览器做到这一点。 :-)
  • 其实它在 Chrome 浏览器中运行良好。

标签: javascript ipad ios5 mobile-safari


【解决方案1】:

如果您有一个计数器,而不是每秒增加 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

【讨论】:

  • 这不是我的问题,我在问为什么我的 JavaScript 在 ipad(ios 5) 上的标签不活动时会暂停。
  • 您的 javascript 暂停是因为您在问题中猜测的原因:性能。据我所知,没有办法让 javascript 在后台运行,除非有,否则唯一的方法是围绕它编写代码,以便代码可以从暂停中恢复,就像 Sohnee 说的那样。
  • 感谢您在答案中添加代码,但这不是我需要的。指向计数器的链接只是为了解释脚本暂停的问题。谁能回答我的实际问题,即当浏览器选项卡不活动时如何使 JavaScript 工作。
  • @AnilShahu 答案(包含在我上面的答案中)是您无法更改浏览器行为,您需要在约束范围内工作。
  • 为什么 Math.round() 调用有第二个参数?为什么 currentTime 只是一个日期而不是 Date().getTime()?
【解决方案2】:

这对 iOS 5 来说并不是什么新鲜事。Mobile Safari总是暂停非活动标签的 javascript 执行。我之所以知道这一点,是因为我在一两年前在网页中保存地理坐标的运行记录时进行了测试。

【讨论】:

  • 我认为它适用于我的上一代 ipad 和 ios 4,无论如何,任何人都可以回答我的实际问题,即当标签不活动时如何使 JavaScript 工作。或者根本不可能?跨度>
  • 就像大家说的,你不能那样做。这是不可能的,因为这不是 Mobile Safari 的工作方式。
【解决方案3】:

当我在 iPad 上打开新标签时遇到问题,我无法捕捉到“焦点”事件,所以在寻找正确的事件后,我发现您可以使用:“pageshow”

祝你好运!!!

【讨论】:

    【解决方案4】:

    您为什么不能尝试-检查当前浏览器选项卡是否处于活动状态,并根据该条件执行您的操作。看看这是最好的解决方案

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-30
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      相关资源
      最近更新 更多