防止在刷新/F5时发生OnBeforeUnload()事件

6

我正在使用onbeforeunload事件在关闭页面时执行操作。
我不希望在进行刷新 / F5操作时触发该事件。

是否有其他事件或方法可以实现这一点?

3个回答

4

很遗憾,onbeforeunload事件监听浏览器中页面的状态。转到另一个页面或刷新将更改页面状态,这意味着onbeforeunload将被触发。

所以我认为只捕获刷新不可能。

但是,如果您通过JavaScript监听并防止Keypress,则可以实现。

可以通过F5CtrlR键进行刷新,因此您的目标是防止这些操作。

使用jQuery的.keydown(),您可以检测这些键码:

对于CtrlR

$(document).keydown(function (e) {
    if (e.keyCode == 65 && e.ctrlKey) {
        e.preventDefault();
    }
});

按下 F5 键。
$(document).keydown(function (e) {
    if (e.which || e.keyCode) == 116) {
        e.preventDefault();
    }
});

我不想捕获页面刷新。我希望页面刷新不会触发事件。 - Refael
1
点击刷新图标怎么样? - Refael
2
不幸的是,您无法通过Javascript阻止浏览器的刷新按钮。 - zur4ik
你无法捕获此事件? - Refael
据我所知,目前还不可能。 - zur4ik

1
我会使用keydown监听器来检查F5并设置一个标志变量。

http://api.jquery.com/keydown/

检测浏览器按钮刷新并不容易/可能。

0
我想在beforeunload事件中添加消息提示,我的解决方案如下:
  $(document).ready(function(){
        window.onbeforeunload = PopIt;
        $("a").click(function(){ window.onbeforeunload = UnPopIt; });
        $(document).keydown(function(e){
            if ((e.keyCode == 82 && e.ctrlKey) || (e.keyCode == 116)) {
                window.onbeforeunload = UnPopIt;
            }
        });
  });

  function PopIt() { return "My message before leaving"; }
  function UnPopIt()  { /* nothing to return */ }

第三行代码($("a").click...)是为了避免在网页不同部分之间导航时显示弹窗提示。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接