6

我正在使用onbeforeunload事件在关闭页面期间执行操作。
我不希望事件发生在Refresh/的情况下F5

有没有办法或其他事件来做到这一点?

4

3 回答 3

4

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

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

但是,如果您Keypress通过 JavaScript 进行侦听和阻止,则可以实现。

刷新可以通过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();
    }
});
于 2013-10-23T08:14:34.220 回答
1

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

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

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

于 2013-10-23T08:16:11.787 回答
0

我想在卸载前添加一个消息警报,所以我的解决方案是这个:

  $(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...)是为了避免在 web 部分之间导航时显示警报。

于 2016-05-26T10:27:14.573 回答