unload
事件是在浏览器窗口或标签页即将关闭时触发的事件。它可以用于执行一些清理操作,例如保存用户数据、断开网络连接等。
beforeunload
:在窗口或标签页关闭之前触发,可以显示一个确认对话框询问用户是否真的要离开。unload
:在窗口或标签页关闭时触发,用于执行一些清理操作。beforeunload
提示用户确认离开window.addEventListener('beforeunload', function (e) {
// 取消事件的默认行为
e.preventDefault();
// Chrome 需要设置 returnValue
e.returnValue = '';
});
unload
执行清理操作window.addEventListener('unload', function () {
// 断开 WebSocket 连接
if (ws && ws.readyState === WebSocket.OPEN) {
ws.close();
}
// 清除定时器
clearInterval(timerId);
});
beforeunload
事件不触发原因:
window.open
)打开的,且未设置 noopener
或 noreferrer
。解决方法:
noopener
和 noreferrer
打开新窗口。const newWindow = window.open('https://example.com', '_blank', 'noopener,noreferrer');
原因:
unload
和 beforeunload
事件的处理函数中不允许执行异步操作,如 fetch
请求。解决方法:
navigator.sendBeacon
发送数据。window.addEventListener('unload', function () {
const data = JSON.stringify({ key: 'value' });
navigator.sendBeacon('/api/save', data);
});
unload
事件及其相关事件在处理页面关闭时的清理工作和用户体验优化方面非常有用。了解其基础概念、优势、应用场景以及常见问题解决方法,可以帮助开发者更好地利用这些事件提升应用的稳定性和用户体验。
领取专属 10元无门槛券
手把手带您无忧上云