在意外断电时恢复JS计时器
Resuming JS timer on accidental power failure
我正在制作一个在线测验应用程序,该应用程序具有通过JavaScript实现的计时器。如果意外导致浏览器因电源故障而关闭,我打算从关闭浏览器的时间点恢复计时器。现在,我只在使用 PHP/AJAX 的数据库中记录测验结束时的时间。如何从用户关闭浏览器的确切时间恢复?
电源故障的问题是,您不会在停电之前收到通知,因此在电源故障时没有机会保存状态。
因此,知道何时停电的唯一方法是每N个时间间隔连续保存状态。 然后,当停电然后恢复时,您可以查看上次保存的状态。 它不会是完美的,但将是你能做的最好的。
保存状态的三个选项是:
- 每分钟设置一个 cookie(或包含运行时间计数的某个时间段(。
- 将相同的状态保存到本地存储(较新的浏览器(。
- 通过定期的 ajax 调用(每隔几分钟(将运行时间"自动保存"到服务器。
选项 1 和 2 的优点是它都是客户端的,因此保存速度很快,不会加载服务器。 选项 1 和 2 的缺点是,可以想象它们可能会被试图与系统博弈的客户端操纵。
有一个小危险,即使是选项 1 和 2 中的本地状态也可能在断电时无法正确保存,但据我所知,大多数浏览器在保存时都会将其保存到磁盘,以便即使浏览器后来崩溃,它也是可靠的。
您可以订阅窗口卸载事件,但我不能 100% 确定这会在电源故障关闭时触发。
也许更好的解决方案是在测验过程中通过一个setInterval
轮询用户,该可以每 1000 毫秒(或多么频繁(触发一次并设置/更新 cookie。
相关文章:
- 在JS中设置计时器1秒
- 在意外断电时恢复JS计时器
- 我需要JS/jQuery中的倒计时计时器
- 在 Node.Js 脚本中使用 Javascript 计时器在特定时间触发事件
- 在 Canvas 中使用 JS 倒数计时器和 requestAnimationFrame
- 引用计时器JS的非全局变量
- 按下按钮时JS计时器未启动
- 在循环中运行setInterval()计时器-jQuery/JS
- 现有倒数计时器中的 JS 计数计时器
- 计时器触发了令人作呕(本机v8natives.js:1582)
- 在 JS 中清除计时器时出现问题
- 如何制作倒数计时器到jquery或js与倒计时时间(H:i:s)
- 这个JS计时器是如何暂停的
- 处理.js计时器
- JS - 在 mysql 中添加计时器作为毫秒的日期时间
- Js 倒数计时器 css 格式化/自定义
- 如何将此计时器放入循环中?.JS
- 如何在 Phaser JS 中实现一个好的计时器
- 角度.js计时器完成回调方法不绑定数据
- JS计时器只适用于秒,如何添加分钟和小时