以下引用了GPT生成的解答:
要区分页面关闭和页面刷新,可以利用unload
事件和beforeunload
事件的差异。unload
事件在页面关闭时触发,而beforeunload
事件在页面关闭或刷新时都会触发。
你可以使用以下代码来判断是否是页面关闭而不是页面刷新:
let isPageRefreshing = false;
window.addEventListener('beforeunload', (e) => {
if (!isPageRefreshing) {
e.preventDefault();
e.returnValue = '确定要关闭此窗口吗?';
}
});
window.addEventListener('unload', () => {
isPageRefreshing = true;
});
// 其他刷新页面的代码(例如点击刷新按钮)
function refreshPage() {
isPageRefreshing = true;
window.location.reload();
}
在这个代码中,我们引入了一个isPageRefreshing
变量来跟踪页面是否正在刷新。当页面关闭时,beforeunload
事件会被触发,但只有在isPageRefreshing
为false
时才会阻止用户,并显示确认弹框。当页面刷新时,unload
事件会被触发,此时我们将isPageRefreshing
设为true
,以区分页面关闭和页面刷新。