javascript检测用户是否离开了站点或刚刚刷新/单击了链接
我使用nodejs服务器来显示在线用户,但即使用户单击链接或刷新页面,它也会激活断开连接功能。我试图绕过这一点,仅当用户使用以下代码关闭选项卡/窗口时,才向服务器发送消息: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() { $
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秒内没有重新连接,则将其视为“左”。