我有一个倒计时每一秒的计时器。 直到用户打开3个或4选项卡中的我的网站,在这一点的最新标签的时间走完两倍或三倍的速度它的伟大工程。 我目前只可以重现这个bug在IE8。 我以前使用的setInterval,并能复制Firefox中的错误也是如此。
实际上,我使用FBJS(Facebook的JavaScript)的,所以我就放弃了一些伪代码。
function countDown() {
...
setTimeout(function() { countDown() }, 1000);
}
countDown();
然而,就是我真正需要的是更多的理论。 我知道浏览器可以尝试玩“赶上”的setInterval,但多个选项卡是如何导致这种行为的setTimeout?
这整个情况是非常奇怪的。 这是未来想到它使任何意义,唯一的方案是一个在浏览器尝试“平稳”自我复原一个定时器,相同的setInterval的时期,而这这样做,实际上是混淆在不同的窗口,每个定时器的代码其他。
我不知道这是否是可行的,尤其是与Facebook有关,但一个有趣的测试将是给每个实例随机名称为countDown
的功能,看看是否有什么差别,如:
<?php $timerTag = rand(1, 1000); ?>
function countDown<?php echo $timerTag ?>() {
...
setTimeout(function() { countDown<? php echo $timerTag ?>() }, 1000);
}
countDown<?php echo $timerTag ?>();
如果这改变所观察到的行为,即主张我心目中的情景。 (和可能提供解决问题的方法。)