【发布时间】: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