【发布时间】:2012-09-03 20:19:25
【问题描述】:
我正在制作一个在线测验应用程序,它有一个通过 JavaScript 实现的计时器。如果不小心,浏览器因断电而关闭,我打算从浏览器关闭的时间点恢复计时器。现在,我只在使用 PHP/AJAX 的数据库中记录测验结束时的时间。如何从用户关闭浏览器的确切时间恢复?
【问题讨论】:
标签: javascript
我正在制作一个在线测验应用程序,它有一个通过 JavaScript 实现的计时器。如果不小心,浏览器因断电而关闭,我打算从浏览器关闭的时间点恢复计时器。现在,我只在使用 PHP/AJAX 的数据库中记录测验结束时的时间。如何从用户关闭浏览器的确切时间恢复?
【问题讨论】:
标签: javascript
停电的问题是不会提前通知您停电,因此无法在停电时保存状态。
因此,了解何时断电的唯一方法是每隔 N 时间间隔连续保存状态。然后,当电源熄灭并恢复时,您可以查看上次保存的状态。它不会是完美的,但会是你能做到的最好的。
您保存状态的三个选项是:
选项 1 和 2 的优点是它都是客户端的,因此保存速度很快并且不会加载您的服务器。选项 1 和 2 的缺点是它们可能会被试图操纵系统的客户端操纵。
即使是选项 1 和 2 中的本地状态也可能在断电时无法正确保存,但据我所知,大多数浏览器在保存时都会将其保存到磁盘上,这样即使浏览器也能可靠保存后来崩溃了。
【讨论】:
您可以订阅窗口卸载事件,但我不能 100% 确定它会在电源故障关闭时触发。
也许更好的解决方案是在测验过程中通过setInterval 轮询用户,该setInterval 可以每 1000 毫秒(或无论多么频繁)触发并设置/更新 cookie。
【讨论】: