因此,我开发了this网站,用于监控全球多个实验的状态。该网站应该每隔几秒更新一次,所以我每隔3秒就使用一次JavaScript。
该页面工作正常,但如果我离开它一段时间或切换标签,计时器就会停止!在源代码中,您将看到停止计时器的唯一操作是:
1-如果用户点击了计时器本身
2-如果用户选择要查看的特定数据
为什么单独停止?我怎么能强迫它永远运行?我怀疑这是一个浏览器的事情。我使用的是谷歌浏览器46.0.2490.80和Firefox 42.0。
如果您需要任何其他信息,请询问。
答案 0 :(得分:1)
有趣的案例。
请注意,您不必切换计时器停止的标签,只需稍等一下,它最终会自行停止。
您的#submitDateForm
HTML格式不正确(缺少</center>
结束标记),因此</form>
结束标记似乎被忽略。
因此,此表单与以下表单合并(#refreshForm
)。提交后者时,它还会提交“父”表单(#submitDateForm
),因此会发送两个AJAX / POST请求。然后是一个竞争条件,关于哪一个将最后解决并覆盖您的doCount
全局变量的值,这是您的计时器的开关。
最终#submitDateForm
请求会比另一个请求稍微长一点,将doCount
设置为0,就是这样!你的计时器停止了。
演示:http://jsfiddle.net/c86kfu1a/
顺便说一句,HTML中还有其他一些语法错误(例如{2}处的</cetner>
),找不到2个文件(default.css和highlight.pack.js)。
我建议您使用Developers工具进行调试,这非常方便。在Chrome和Firefox中按F12打开面板。
答案 1 :(得分:0)
现代网络浏览器上的计时器无法正常运行。
由于标签位于后台,因此Chrome和其他浏览器会将功能和超时/间隔限制为每秒最多一次。
可能的解决方案(虽然不是您的案例的最佳架构)是使用Web Workers。看一下这个插件https://github.com/turuslan/HackTimer
重复的问题:Chrome: timeouts/interval suspended in background tabs?