在用户退出页面之前做一些事情

时间:2010-03-15 08:24:58

标签: javascript javascript-events

我在这里看到了一些关于我想要达到的目标的问题,并且基于我迄今为止对这些答案的看法。但是有一点轻微的不当行为仍然让我感到恼火。

我所拥有的是一种恢复功能。每当您键入文本时,客户端每45秒向服务器发送一次同步请求。它做了两件事。首先,它将客户在记录上的租约(一次只能编辑一个人)延长60秒。其次,它将目前为止输入的文本发送到服务器,以防服务器崩溃,互联网连接失败等。在这种情况下,用户下次进入我们的应用程序时,会通知用户出现了问题并且有些文本被收回了。想想微软或OpenOffice在崩溃时的恢复!

当然,如果用户自愿离开页面,则不需要通知用户,因此删除了恢复。我通过beforeunload事件做了最后的请求。

在我被要求做出最后的调整之前,一切都很顺利......当你退出编辑器时,你在堆栈溢出的同样行为......确认对话。

这项工作到目前为止,但确认对话框显示两次。这是代码。

事件

if (local.sync.autosave_textelement) {
   window.onbeforeunload = exitConfirm;
}

功能

function exitConfirm() {
   var local = Core;
   if (confirm('blub?')) {
      local.sync.autosave_destroy = true;
      sync(false);
      return true;
   } else {
      return false;
   }
};

一些问题无关的澄清:

  • Core是一个全局Object,包含许多随处可用的变量。
  • sync发出ajax请求。这些值基于Core.sync对象包含的值。该参数确定呼叫应该是异步(默认)还是同步。

编辑1

我确实试图将这两件事(恢复删除和用户确认)分离为beforeunload和unload。问题是卸载有点太晚了。即使计划删除,也会通知用户存在恢复。如果您在1秒后刷新页面,则对话框会随着文件被删除而消失。

1 个答案:

答案 0 :(得分:0)

你试过这个:

if (local.sync.autosave_textelement) {
   window.onunload = exitConfirm;
}