1

nodejsサーバーを使用してオンラインユーザーを表示していますが、ユーザーがリンクをクリックしたりページを更新したりしても、切断された機能がアクティブになります。ユーザーがタブを閉じた場合にのみサーバーにメッセージを送信することで、これをバイパスしようとしています/window に次のコードを追加します。

var socket = io.connect('http://example.com:8000');

socket.emit('started', { username: "TestUser", });

var clicked = false;

$(document).ready(function() {
    $("a[href]").click(function() {
        clicked = true;
    });

    $(document).bind('keypress keydown keyup', function(e) {
        if(e.which === 116) {
            clicked = true;
        }
        if(e.which === 82 && e.ctrlKey) {
            clicked = true;
        }
    });
});

window.onbeforeunload = function(e){
    if(!clicked) {
        socket.emit('userDisconnected', { user: "TestUser" });
    }
};

これは、ユーザーがリンクをクリックした場合、およびユーザーが F5 を押した場合にも機能しますが、ブラウザの更新ボタンをクリックしたかどうかを検出するにはどうすればよいですか

基本的に、ユーザーが自分のウェブサイトを離れたときにのみ userDisconnected メッセージを送信したい

ありがとう

4

1 に答える 1

2

不可能です。もしそうなら、おそらくバグと見なされます。しかし、あなたがここで行ったことは巧妙で、重要なイベントを探しています。

実際に達成したいことに応じて、別の方法でアプローチできます。ウィンドウがアンロードされるたびに、ソケットを介して通知を送信します。そのソケットにタイムアウト イベントを設定して、そのソケットをスタンバイ状態にします。また、サイト内の更新時またはナビゲーション時にページに再接続シグナルを発行させます (私が戻ってきたことを示す何か)。スタンバイのソケットが 5 秒 (またはその他の数) 秒以内にこのシグナルを受信しない場合は、サーバーの接続を閉じます。その場合は、タイムアウトをキャンセルします。

于 2013-01-28T20:55:45.443 に答える