Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript检测用户是否离开了站点或刚刚刷新/单击了链接_Javascript_Jquery_Onbeforeunload - Fatal编程技术网

javascript检测用户是否离开了站点或刚刚刷新/单击了链接

javascript检测用户是否离开了站点或刚刚刷新/单击了链接,javascript,jquery,onbeforeunload,Javascript,Jquery,Onbeforeunload,我使用nodejs服务器来显示在线用户,但即使用户单击链接或刷新页面,它也会激活断开连接功能。我试图绕过这一点,仅当用户使用以下代码关闭选项卡/窗口时,才向服务器发送消息: var socket = io.connect('http://example.com:8000'); socket.emit('started', { username: "TestUser", }); var clicked = false; $(document).ready(function() { $

我使用nodejs服务器来显示在线用户,但即使用户单击链接或刷新页面,它也会激活断开连接功能。我试图绕过这一点,仅当用户使用以下代码关闭选项卡/窗口时,才向服务器发送消息:

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消息只在用户离开我的网站时发送


谢谢

不可能,如果是这样的话,可能会被认为是一个bug。但你在这里做的很聪明,寻找关键事件


根据您实际想要实现的目标,您可以用另一种方式来实现它。在每次窗口卸载时通过套接字发送通知。通过在该套接字上设置超时事件,将该套接字置于备用状态。让你的页面在刷新或导航时发出重新连接信号(比如说我回来了)。如果待机状态下的套接字在5(或其他数字)秒内未收到此信号,请关闭服务器上的连接。如果超时,请取消超时。

我认为不可能可靠地检测到。该死,那太可惜了,无论如何,谢谢。最接近的方法是使用cookies,以了解用户是否保持活动状态!我支持这个。在删除之后,如果用户在X秒内没有重新连接,则将其视为“左”。