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 に答える