0

假设我有一个计时器将通过用户单击一个按钮来激活,我如何在用户关闭浏览器之前保存数据(当前计时器状态和数据)并在用户访问同一页面后恢复计时器,考虑到经过两次会议之间的时间。

我的开发基于 ASP.NET MVC4,而且我主要使用 ajax 调用来服务用户交互。

我正在考虑是否有一种方法可以通过服务器端代码控制这种交互和要求,但我对此持怀疑态度。

你有什么想法?

4

3 回答 3

1

可以通过使用 cookie 在客户端完成全部操作。

这是流程:

  1. 在点击事件处理程序中创建一个计时器
  2. 为浏览器关闭事件添加事件处理程序(看这里如何捕获浏览器关闭事件?
  3. 在浏览器关闭事件处理程序中获取计时器的剩余时间(在这里您可以找到说明找到 setTimeout() 中剩余的时间?
  4. 用该信息编写一个 cookie
  5. 在页面加载时检查是否有一个带有剩余时间信息的 cookie,并使用 setTimeout 重新创建一个剩余时间的计时器

我将尝试使用更多代码示例尽快更新这篇文章。

更新

var timeLeft= $.cookies('timeLeft') || ORIGINAL_VALUE;
var timer = setTimeout(myFunc, timeLeft);
$(window).unload(function(){
  var timeLeftToSave = getTimeLeft(timer);
  $.cookies('timeLeft', timeLeftToSave, { path: '/' });
})

//Use code from the second link here
function getTimeLeft(timer){

}



function myFunc(){/*YOUR CODE HERE*/}
于 2013-08-20T09:16:34.397 回答
0

您可以尝试使用事件的当前值创建一个 cookie,unload然后在您再次启动计时器时进行检查?

$(window).unload(function() {
    // Set a cookie with current timer value
});

在此处查看有关在 Javascript 中设置 cookie 的信息。

于 2013-08-20T09:16:57.057 回答
0

我建议编写一些客户端Javascript来检测onunloadonbeforeunload事件,并将计时器的值存储在用户浏览器的本地存储中。

对于处理本地存储,我建议使用一个优秀的库:LawnchairJS。从相关文档

默认情况下,Lawnchair 将持续使用 DOM 存储,但如果其他适配器可用并且当前执行的 JavaScript 运行时不支持 DOM 存储。Lawnchair 将尝试每个连续的适配器,直到找到一个可以工作的适配器。

于 2013-08-20T09:17:20.570 回答