26

使用以下函数是否可以检测到用户按下了刷新按钮或关闭按钮?如果没有,还有其他方法吗?

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

1 回答 1

20

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

浏览器关闭时检测刷新浏览器以进行卸载/卸载前

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

在Javascript中检测浏览器刷新

检查页面是否在 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));

您还可以检测单击链接的时间是否链接的目标是否在同一站点上: 如何检测用户何时离开我的站点,而不仅仅是转到不同的页面?

于 2013-02-15T11:13:24.203 回答