首页 > 解决方案 > Onbeforeunload 不提示确认页面重新加载

问题描述

我正在添加一个事件侦听器,用于onbeforeunload在用户尝试离开页面时提示确认消息。

不幸的是,我不希望在用户尝试重新加载页面时出现确认消息。

我该怎么做呢?

这是我到目前为止所拥有的:

window.onbeforeunload = function() {
    return "";
}

标签: javascripthtml

解决方案


完全有可能1

您可以通过快捷键+监听该keydown事件并检查用户是否重新加载了页面。如果是这样,您可以设置一个变量(在我们的例子中为 )并设置一个超时以在 100 毫秒后将其设置回 false。CtrlRisReloadtrue

onbeforeunload事件触发时,检查是否isReloadtrue. 如果是,则返回null以允许浏览器关闭。否则,返回""提示确认。

演示:

var isReload = false;
document.addEventListener('keydown', function(e){
    if(e.ctrlKey && e.keyCode == 82){
        isReload = true;
        setTimeout(function(){isReload = false}, 100);
    }
})
window.onbeforeunload = function(){
    if(!isReload){
        return "";
    }else{
        return null;
    }
}

1这仅适用于快捷方式。如果用户手动单击重新加载按钮,则无法区分关闭/重新加载


推荐阅读