【问题标题】:javascript beforeunload detect refresh versus closejavascript beforeunload 检测刷新与关闭
【发布时间】:2012-07-12 14:12:09
【问题描述】:

使用下面的函数可以检测出用户有哪个按钮 按下刷新按钮还是关闭按钮?如果没有,还有其他方法吗?

$(window).bind('beforeunload', function(event) {
    return 'pls save ur work';
});

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    简单的答案是否定的 - 浏览器的安全模型不允许您明确检测用户选择以何种方式离开您的页面(刷新/关闭/内部链接/外部链接)。

    detect refresh browser for unload/beforeunload when browser closed

    可以 - 使用 cookie - 检查用户何时加载您的页面,是否他们之前在同一会话中访问过该网站 - 例如。检测它们是否已刷新 - 但不是在它们刷新之前:

    Detect Browser Refresh in Javascript

    Check if page gets reloaded or refreshed in Javascript

    一种部分且不完善的方法是在页面卸载之前检测他们是否按下了“F5”或“Ctrl+R”或“Cmd+R”(用于刷新的键盘快捷键)。这将检测到一些刷新,但不会检测到用户实际单击刷新按钮的位置。

    (function($) {
        var refreshKeyPressed = false;
        var modifierPressed = false;
    
        var f5key = 116;
        var rkey = 82;
        var modkey = [17, 224, 91, 93];
    
        // Check for refresh keys
        $(document).bind(
            'keydown',
            function(evt) {
                // Check for refresh
                if (evt.which == f5key || window.modifierPressed && evt.which == rkey) {
                    refreshKeyPressed = true;
                }
    
                // Check for modifier
                if (modkey.indexOf(evt.which) >= 0) {
                    modifierPressed = true;
                }
            }
        );
    
        // Check for refresh keys
        $(document).bind(
            'keyup',
            function(evt) {
                // Check undo keys
                if (evt.which == f5key || evt.which == rkey) {
                    refreshKeyPressed = false;
                }
    
                // Check for modifier
                if (modkey.indexOf(evt.which) >= 0) {
                    modifierPressed = false;
                }
            }
        );
    
        $(window).bind('beforeunload', function(event) {
            var message = "not refreshed";
    
            if (refreshKeyPressed) {
                message = "refreshed";
            }
    
            event.returnValue = message;
            return message;
        });
    }(jQuery));
    

    您还可以检测点击链接时链接的目标是否在同一个站点上: How can I detect when the user is leaving my site, not just going to a different page?

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 2013-06-17
      • 2011-03-28
      • 2019-08-26
      • 1970-01-01
      相关资源
      最近更新 更多