在may聊天应用程序中,我想区分关闭选项卡并刷新它们,如果用户在一个选项卡中注册聊天,那么当他打开其他选项卡时,他也将被注册,当有多个选项卡打开时用户关闭一个他仍然会注册。我面临的问题是,当只有一个标签打开时,当他刷新页面时,他会退出,但我希望他保持登录状态。
client.js
:
window.addEventListener('load', function () {
var b = localStorage.getItem("localStor");
if (b === null || b === "{}") {
console.log("is null");
localStorage.setItem("localStor", "{}");
} else {
console.log("exists");
var r= JSON.parse(b).cnt + 1;
var updatedLocal={
msg: "" ,
details: {
name : JSON.parse(b).name,
email : JSON.parse(b).email
},
cnt : r
}
localStorage.setItem("localStor" , JSON.stringify(updatedLocal));
console.log("after : " + JSON.parse(localStorage.localStor).cnt);
//display view for registered user
}
}, false);
window.addEventListener('unload', function(){
var b=JSON.parse(localStorage.localStor);
if (b.cnt === 1) {
localStorage.removeItem("localStor");
localStorage.clear();
navigator.sendBeacon("/log", { email: b.email });
} else {
var updatedLocal={
msg: "" ,
details: {
name : b.name,
email : b.email
},
cnt : b.cnt - 1
}
localStorage.setItem("localStor" , JSON.stringify(updatedLocal));
}, false);
整个想法是我为用户打开的标签设置了counter
,所以当他再打开一个标签时,我会增加计数器,当他关闭标签时我会减少它。刷新最后一个选项卡时注销用户是由卸载窗口事件引起的,因为那时计数器确实等于1。我读到了onbeforeunload事件,但我认为它不会有所帮助,因为在所有情况下卸载代码都会在刷新时完成。如何知道用户是关闭还是刷新选项卡(在没有JQuery的Javascript
中)?任何帮助表示赞赏。