我有一个每秒倒计时的计时器。它工作得很好,直到用户打开我的网站的 3 或 4 个选项卡,此时最新选项卡的计时器速度变为两倍或三倍。我目前只能在 IE8 中重现该错误。我之前使用的是 setInterval,并且也可以在 Firefox 中重现该错误。
我实际上使用的是 FBJS(Facebook 的 Javascript),所以我只给出一些伪代码。
function countDown() {
...
setTimeout(function() { countDown() }, 1000);
}
countDown();
然而,我真正寻找的是更多的理论。我知道浏览器可以尝试使用 setInterval 来“追赶”,但是多个选项卡如何导致 setTimeout 出现这种行为?
整个情况非常奇怪。我想到的唯一有意义的场景是浏览器试图“平滑”自我恢复 setTimeouts 的周期,与 setInterval 相同,而这样做的代码实际上混淆了不同窗口中的计时器其他。
我不知道这是否可行,特别是涉及 Facebook,但一个有趣的测试是为每个实例指定一个随机名称countDown
函数并看看这是否有任何区别,例如:
<?php $timerTag = rand(1, 1000); ?>
function countDown<?php echo $timerTag ?>() {
...
setTimeout(function() { countDown<? php echo $timerTag ?>() }, 1000);
}
countDown<?php echo $timerTag ?>();
如果这改变了观察到的行为,那就证明了我想到的场景。 (并且可能提供解决问题的方法。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)