当浏览器窗口关闭或者刷新时,会触发beforeunload事件。当前页面不会直接关闭,可以点击确定按钮关闭或刷新,也可以取消关闭或刷新。
事件使网页能够触发一个确认对话框,询问用户是否真的要离开该页面。如果用户确认,浏览器将导航到新页面,否则导航将会取消。
根据规范,要显示确认对话框,事件处理程序需要在事件上调用preventDefault()。
但是请注意,并非所有浏览器都支持此方法,而有些浏览器需要事件处理程序实现两个遗留方法中的一个作为代替:
将字符串分配给事件的returnValue属性
从事件处理程序返回一个字符串。
某些浏览器过去在确认对话框中显示返回的字符串,从而使事件处理程序能够向用户显示自定义消息。但是,此方法已被弃用,并且在大多数浏览器中不再支持。
为避免意外弹出窗口,除非页面已与之交互,否则浏览器可能不会显示在beforeunload事件中创建的提示,甚至根本不会显示它们。就是说只有用户真正去操作页面引起页面改变时才会触发这个事件,如果只是打开页面没有任何操作直接关闭页面是不会触发的。
将事件处理程序/监听器加到window或 document的beforeunload事件后,将阻止浏览器使用内存中的页面导航缓存,例如Firefox的Back-Forward缓存或WebKit的Page Cache。
HTML规范指出在此事件中调用window.alert(),window.confirm()以及window.prompt()方法,可能会失效。
HTML规范指出作者应该使用 Event.preventDefault() 而非 Event.returnValue,然而,不是所有浏览器都支持这么做。
window.addEventListener('beforeunload', (event) => {
// Cancel the event as stated by the standard.
event.preventDefault();
// Chrome requires returnValue to be set.
event.returnValue = '';
});
参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Window/beforeunload_event
unload事件 https://developer.mozilla.org/zh-CN/docs/Web/API/Window/unload_event
END