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

Javascript 在用户退出页面之前做一些事情,javascript,javascript-events,Javascript,Javascript Events,我在这里看到了一些关于我想要实现什么的问题,并根据这些答案得出了我目前的结论。但有一点行为不端仍然让我恼火 我有一种恢复功能。每当您键入文本时,客户端每45秒向服务器发送一次同步请求。它有两个功能。首先,它延长了客户在记录上的租约,每次只有一个人可以再编辑60秒。其次,它会将目前键入的文本发送到服务器,以防服务器崩溃、internet连接失败等。在这种情况下,用户下次进入我们的应用程序时,会通知用户出现了问题,并恢复了一些文本。每当Microsoft或OpenOffice恢复崩溃时,请考虑它们

我在这里看到了一些关于我想要实现什么的问题,并根据这些答案得出了我目前的结论。但有一点行为不端仍然让我恼火

我有一种恢复功能。每当您键入文本时,客户端每45秒向服务器发送一次同步请求。它有两个功能。首先,它延长了客户在记录上的租约,每次只有一个人可以再编辑60秒。其次,它会将目前键入的文本发送到服务器,以防服务器崩溃、internet连接失败等。在这种情况下,用户下次进入我们的应用程序时,会通知用户出现了问题,并恢复了一些文本。每当Microsoft或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是一个全局对象,它包含了很多在任何地方都使用的变量。 sync发出ajax请求。这些值基于Core.sync对象包含的值。该参数确定调用是异步默认还是同步。 编辑1 我确实尝试将恢复删除和用户确认这两件事分离到beforeunload和unload中。问题是卸载有点太晚了。用户会被告知存在恢复,即使计划删除该恢复。如果您在1秒后刷新页面,该对话框将消失,因为此时文件已被删除。

您是否尝试过以下操作:

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

如果我这样做,对话只出现一次,但取消按钮也不起作用。