相关疑难解决方法(0)

如果Chrome中的标签处于非活动状态,如何才能使setInterval正常工作?

setInterval每秒运行一段代码30次.这很好用,但是当我选择另一个选项卡(以便我的代码的选项卡变为非活动状态)时,由于setInterval某种原因将其设置为空闲状态.

我做了这个简化的测试用例(http://jsfiddle.net/7f6DX/3/):

var $div = $('div');
var a = 0;

setInterval(function() {
    a++;
    $div.css("left", a)
}, 1000 / 30);
Run Code Online (Sandbox Code Playgroud)

如果您运行此代码然后切换到另一个选项卡,等待几秒钟然后返回,动画将继续在您切换到另一个选项卡时的位置.因此,如果选项卡处于非活动状态,则动画不会每秒运行30次.这可以通过计算setInterval每秒调用函数的次数来确认- 如果选项卡处于非活动状态,则不会是30,而只是1或2.

我想这是通过设计完成的,以提高性能,但有没有办法禁用这种行为?在我的场景中,它实际上是一个缺点.

javascript google-chrome setinterval

171
推荐指数
8
解决办法
11万
查看次数

当标签或窗口不活动时,浏览器如何暂停/更改Javascript?

背景:我正在做一些需要检测人们是否注意的用户界面测试.但是,这个问题是不是有关的页面知名度API.

具体来说,我想知道如果在不同的浏览器中当前选项卡未激活或浏览器窗口未激活,我的Javascript代码将如何受到影响.到目前为止,我已经挖出了以下内容:

我有以下问题:

  • 除了移动浏览器之外,当选项卡不活动时,桌面浏览器是否会暂停JS执行?何时和哪些浏览器?
  • 哪些浏览器减少setInterval重复?它只是减少到一个限度或一个百分比?例如,如果我有一个10ms重复而不是5000ms重复,那么每个都会受到怎样的影响?
  • 如果窗口失焦,是否会发生这些变化,而不仅仅是标签?(我想它会更难检测,因为它需要OS API.)
  • 在活动标签中是否还有其他效果?他们会把那些本来可以正确执行的事情弄糟(即前面提到的Jasmine测试)吗?

javascript browser

158
推荐指数
2
解决办法
5万
查看次数

JavaScript在无效的Android Chrome标签中停止

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

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

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

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

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

我试图保持标签处于活动状态,每隔一段时间就运行一次AJAX请求,但这些请求也会暂停.我没有尝试过让JavaScript继续运行.

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

javascript android google-chrome

12
推荐指数
1
解决办法
2969
查看次数