Javascript 取消卸载确认之前捕获?

Javascript 取消卸载确认之前捕获?,javascript,jquery,events,onbeforeunload,Javascript,Jquery,Events,Onbeforeunload,我想在用户离开页面时做一些事情,我添加了以下代码 window.onbeforunload = function (e){ return "You save some unsaved data, Do you want to leave?"; } 此提示可以通知用户,用户可以留在页面上或离开。但我想更多地了解他是否离开,并根据他的决定行事。我试过这个 window.onbeforunload = function (e){ var event = jQuery.Event(e)

我想在用户离开页面时做一些事情,我添加了以下代码

window.onbeforunload = function (e){
   return "You save some unsaved data, Do you want to leave?";
}  
此提示可以通知用户,用户可以留在页面上或离开。但我想更多地了解他是否离开,并根据他的决定行事。我试过这个

window.onbeforunload = function (e){
   var event = jQuery.Event(e);
   var result = confirm('want to leave?');
   if (result ==  false){
     //do sth.. 
     event.preventDefault();
   }else{
    //do clean up
   }
} 
但它失败了!!它总是消失

有人能帮我吗

您使用的方法(防止事件冒泡)是故意不可能的,否则您可能会阻止用户离开您的页面

通过在卸载前执行清理
onunload
,您可以实现与您想要的类似的效果,并在卸载前执行您一直想做的事情
onforeUnload

您使用的方法(防止事件冒泡)是故意不可能的,否则您可以阻止用户离开您的页面


您可以通过在卸载前执行清理
onunload
,并完成您一直想做的事情
onforeUnload

就我在不同的浏览器论坛(如MSDN、MozillaDev等)中读到的关于此方法的内容而言,此方法没有任何OK/Cancel回调。您可以在“确认”对话框中使用此选项,但不能用于此选项


这是一个安全实现,允许用户对他们应该查看的网站拥有完全的权限。此外,它还可以防止黑客将用户锁定到他们的站点。

据我在MSDN、MozillaDev等不同的浏览器论坛上所读到的有关此方法的信息,此方法没有任何OK/Cancel的回调。您可以在“确认”对话框中使用此选项,但不能用于此选项

这是一个安全实现,允许用户对他们应该查看的网站拥有完全的权限。此外,它还避免了黑客将用户锁定在他们的网站上

但我想更多地了解他是否离开,并根据他的决定行事

如果你想在他离开时做点什么,你可以在
unload
事件中完成。例如,正如@Erik Bakker提到的,您可以在
unload
event中发送异步事件

然而,如果您想知道用户是否“留下来”,换句话说,取消了离开过程,也有一种方法。这有点老套,但很管用

const doSomethingWhenUserStays=函数doSomethingWhenUserStays(){
警报('用户停留!!!');
}
addEventListener('beforeunload',函数onBeforeUnload(e){
设置超时(doSomethingWhenUserStays,500);
//对话框文本在Chrome中不起作用。
const dialogText='离开页面时的对话框文本';
e、 returnValue=对话框文本;
返回对话框文本;
});
但我想更多地了解他是否离开,并根据他的决定行事

如果你想在他离开时做点什么,你可以在
unload
事件中完成。例如,正如@Erik Bakker提到的,您可以在
unload
event中发送异步事件

然而,如果您想知道用户是否“留下来”,换句话说,取消了离开过程,也有一种方法。这有点老套,但很管用

const doSomethingWhenUserStays=函数doSomethingWhenUserStays(){
警报('用户停留!!!');
}
addEventListener('beforeunload',函数onBeforeUnload(e){
设置超时(doSomethingWhenUserStays,500);
//对话框文本在Chrome中不起作用。
const dialogText='离开页面时的对话框文本';
e、 returnValue=对话框文本;
返回对话框文本;

});谢谢,但我想确切地知道“用户打算离开,但改变了他的决定”@Eric我可以在onunload发送一个异步请求吗?是的,请参阅Erik谢谢你的回答-我正在寻找类似的东西,你完全为我解开了谜团。不知道为什么你的答案没有被接受…谢谢,但我想确切地知道“用户打算离开,但改变了他的决定”@Eric我可以在onunload发送一个异步请求吗?是的,请参阅Erik谢谢你的回答-我在寻找类似的东西,你完全为我解开了谜团。不知道为什么你的答案不被接受…顺便说一句,你的接受率可能重复是不可接受的@omnosis这可能是类似的,但我想pin点时,用户决定离开,但改变了决定。顺便说一句,您的接受率可能重复是不可接受的@omnosis可能类似,但我想在用户决定离开但改变决定时锁定点。在firefox中,这似乎对我不起作用,可能是因为计时器实际上是在后台运行的,它不会等待用户单击“取消”。这是一个很好的点。在这种情况下,可能值得尝试setInterval,它应该一直触发,当用户停留在页面上时,您只需调用clearInterval。在firefox中,这似乎对我不起作用,可能是因为计时器实际上是在后台运行的,它不会等待用户单击“取消”。这是一个很好的观点。在这种情况下,可能值得尝试setInterval,它应该一直触发,当用户停留在页面上时,您只需调用clearInterval。