我正在使用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消息
感谢
答案 0 :(得分:2)
不可能,如果它可能会被视为一个错误。但你在这里做的很聪明,正在寻找关键事件。
根据您实际想要完成的任务,您可以采用另一种方式。在卸载每个窗口时通过套接字发送通知。通过在该套接字上设置超时事件,使该套接字处于待机状态。让您的页面在您的站点内刷新或导航时发出重新连接信号(有人说我回来了)。如果待机状态的套接字在5(或其他一些数字)秒内未收到此信号,请关闭服务器上的连接。如果是,请取消超时。