捕获beforeunload确认取消了?

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

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进行清理来实现类似于你想要的东西,并且做你想要做的事情onbeforeunload

至于我在不同的浏览器论坛(如MSDN,MozillaDev等)中读过这个方法,这个方法没有OK / Cancel的任何回调。 你有这个用于确认对话框但不是这个。

这是一个安全实现,允许用户完全了解他们应该看到哪个网​​站。 此外,它避免了黑客锁定用户到他们的网站。

但我想更多地知道他是否离开,并做出决定

如果你想离开时做某事,你可以在unload事件中做。 例如,正如@Erik Bakker所提到的,您可以在unload事件中发送异步事件。

但是,如果你想知道用户是否“留下”,换句话说取消了离开过程,那么也有一种方法。 这有点像hackish,但它确实有效。

 const doSomethingWhenUserStays = function doSomethingWhenUserStays() { alert('user stayed!!!'); } window.addEventListener('beforeunload', function onBeforeUnload(e) { setTimeout(doSomethingWhenUserStays, 500); // Dialog text doesn't really work in Chrome. const dialogText = 'A dialog text when leaving the page'; e.returnValue = dialogText; return dialogText; });