防止在refresh / F5中发生OnBeforeUnload()事件

时间:2013-10-23 08:10:19

标签: javascript jquery html onbeforeunload

我正在使用onbeforeunload事件在结束页面中执行操作 我不希望在Refresh / F5 的情况下发生该事件。

有没有方法或其他事件可以做到这一点?

3 个答案:

答案 0 :(得分:4)

不幸的是,onbeforeunload事件会在浏览器中侦听页面状态。转到另一个页面以及刷新将更改页面状态,这意味着无论如何都会触发onbeforeunload

所以我认为不可能只抓住刷新。

但是,如果您通过JavaScript聆听并阻止Keypress,那么就可以实现。

刷新可以通过 F5 Ctrl R 键完成,因此您的目标是阻止这些操作。

使用jQuery .keydown(),您可以检测到这些密钥代码:

对于 Ctrl R

$(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();
    }
});

答案 1 :(得分:1)

我会使用keydown侦听器来检查F5并设置标志var。

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

使用浏览器按钮检测刷新并不是那么容易/可能。

答案 2 :(得分:0)

我想在onbeforeunload上添加一条消息提醒,所以我的解决方案就是这个:

  $(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")。点击... )是为了避免在网页各部分之间导航时显示警告。