JavaScript - 如何区分刷新/重新加载页面和关闭/卸载页面事件?

时间:2017-09-07 06:56:12

标签: javascript tabs

在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中)?任何帮助表示赞赏。

0 个答案:

没有答案
相关问题