我有一个计时器每秒计算。它运行良好,直到用户打开MY站点的3或4个选项卡为止,这时最新的TAB的计时器将达到双速或三重速度。我目前只能在IE8中重现该错误。我以前在使用SetInterval,并且也可以在Firefox中重现该错误。

我实际上正在使用FBJS(Facebook的JavaScript),所以我只给一些伪代码。

function countDown() {
  ...
  setTimeout(function() { countDown() }, 1000);    
}

countDown();

但是,我真正寻找的是理论上的。我知道浏览器可以尝试使用setInterval播放“赶上”,但是多个选项卡如何引起此行为的settimeout?

有帮助吗?

解决方案

整个情况非常奇怪。唯一想到任何有意义的场景是浏览器试图“平滑”自我介绍的settiemout时期的情况,与setInterval相同,而执行的代码实际上使不同窗口中的计时器混淆了每个窗口中的计时器其他。

我不知道它是否可行,尤其是在涉及Facebook的情况下,但是一个有趣的测试是给每个实例一个随机名称的随机名称 countDown 功能并查看是否有任何区别,例如:

<?php $timerTag = rand(1, 1000); ?>
function countDown<?php echo $timerTag ?>() {
  ...
  setTimeout(function() { countDown<? php echo $timerTag ?>() }, 1000);    
}

countDown<?php echo $timerTag ?>();

如果这改变了观察到的行为,那就是我想到的情况。 (并且可能提供了一种解决问题的方法。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top