【问题标题】:JavaScript halts in inactive android Chrome tabJavaScript 在非活动的 android Chrome 选项卡中停止
【发布时间】:2014-03-30 10:55:36
【问题描述】:

我有一个很小的网页,可以播放可以在手机上收听的音乐。页面上的 JavaScript 设置了加载下一首歌曲并在第一首歌曲结束时播放的超时。

标签处于活动状态时,一切正常。但是在标签变为非活动状态后,超时会继续工作几分钟,然后当当前播放的歌曲结束时,下一首歌曲不会加载或播放。

我假设这是由于 Chrome 暂停了非活动标签的 JavaScript 执行,但我不想在播放音乐的整个过程中都保持屏幕亮着。

我已经使用 Chrome 移动调试器调试了代码,方法是将超时设置为每 500 毫秒运行一次,只显示当前日期。一旦屏幕变黑,超时就会下降到每 1000 毫秒一次,这是预期的,但几分钟后,超时完全停止。但是一旦选项卡再次处于活动状态,所有暂停的超时都会激活并运行。

Chrome 将 setInterval/setTimeout 更改为 1000 毫秒是预期的,但完全暂停执行会使我的整个页面停止工作。

我尝试让标签页保持活动状态,以不时地运行 AJAX 请求,但这些请求也会暂停。我没有尝试过让 JavaScript 保持运行。

基本上,有没有办法解决这个问题?有没有办法在屏幕关闭时保持标签处于活动状态?

【问题讨论】:

  • 嘿。你找到解决问题的方法了吗?,我也面临同样的问题
  • 从下面的答案中可以看出,唯一的解决方案是保持屏幕打开并打开浏览器窗口,从而保持选项卡处于活动状态。
  • 你可以试试bg-timer-helper。我不确定它如何适用于所有执行类型,但它适用于 setTimeout/setInterval
  • 是否(任何)浏览器供应商记录了有关移动设备“优化”的任何信息?我有一个系统,它需要“打开器”页面来为活动(打开)页面提供 ajax 请求,但不仅打开器页面不发送请求,而且活动选项卡甚至没有收到 ajax 超时通知错误(除非在用户“返回”打开页面的不太可能的情况下)。我需要知道活动选项卡上的 iframe 或活动选项卡下的框架集是否保持活动状态。

标签: javascript android google-chrome


【解决方案1】:

没有。出于性能和电池寿命的原因,我们会停止对当前未激活的选项卡的所有处理。与桌面设备相比,运行这些页面的设备非常受限,我们需要尊重用户。

我们确实可以选择让音乐和音频在后台播放(当您的屏幕关闭时),但您无法根据需要移动到下一首曲目。

【讨论】:

  • 这就是我害怕的。感谢您的回复。
  • 我可以更改某个配置设置以绕过此限制吗?也许是 JavaScript 设置和浏览器设置的组合,可以让处理时间更长?
  • 没有。对不起。诸如 Service Worker 之类的项目将来可能会让一些任务在后台保持清醒,但这还差得远。
  • @Kinlan 感谢您的回答,但是否有任何更新可以帮助解决?
  • 如果我将手机插入充电器怎么办?看来我应该被允许覆盖它。尊重和限制我作为用户完全是另一回事。
猜你喜欢
  • 2019-12-09
  • 1970-01-01
  • 2020-05-21
  • 2013-04-30
  • 1970-01-01
  • 2011-12-26
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多