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 回答