【问题标题】:prevent OnBeforeUnload() event from happening in refresh/F5防止在刷新/F5 中发生 OnBeforeUnload() 事件
【发布时间】:2013-10-23 08:10:18
【问题描述】:

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

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

【问题讨论】:

    标签: javascript jquery html onbeforeunload


    【解决方案1】:

    不幸的是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();
        }
    });
    

    【讨论】:

    • 我不想赶上页面刷新。我希望页面刷新不会触发事件。
    • 点击刷新图标怎么样?
    • 不,很遗憾,您无法通过 Javascript 阻止浏览器刷新按钮。
    • 你不能赶上这个事件?
    • 据我所知还不可能。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

        $(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 部分之间导航时显示警报。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-03
        • 2014-12-22
        • 1970-01-01
        • 2015-05-26
        • 1970-01-01
        • 1970-01-01
        • 2012-02-13
        相关资源
        最近更新 更多