在firefox

时间:2018-05-22 07:39:21

标签: javascript local-storage

2013年,我编写了一段代码,阻止用户在同一个域上打开第二个浏览器标签,直到一年前它才能正常运行。它基于“存储”事件,该事件应该在第二个窗口写入localStorage时触发。这是代码:

$(function(){

    var this_tab_key =  randomString(30);
    var listener = function(e){

        if(e.key=='test_block' && e.newValue != this_tab_key)
        {
            STOP_AJAX_CALLS = true;
            var div = $('<div id="modal_block" style="top:0px;left:0px;position:absolute;width:100%;height:100%;opacity:0.5;background-color:black;z-index:12000"></div>');
            div.append('<div style="position:absolute;top:50%;left:0;width:100%;font-size:60px;margin-top:-50px;text-align:center;line-height:50px;" >Please close this tab/windows <br>as another one has been opened</div>');
            $("body").append(div);
            if (window.removeEventListener) 
                window.removeEventListener("storage", listener);
            else
                window.detachEvent("onstorage", listener);
        }
    };

    if (window.addEventListener)
        window.addEventListener("storage", listener);
    else
        window.attachEvent("onstorage", listener);

    localStorage.setItem('test_block', this_tab_key);
});

最近发生的事情是,即使我只打开了一个标签页也会触发“存储”事件,并且在我打开标签后的3/5分钟后正常发生。没有ajax / ws调用,网站中一般没有活动。页面中没有iframe,因此没有其他“窗口”对象。 它似乎只发生在Firefox中,但他们告诉我,即使我从未亲眼看过它也可能发生在chrome中。 你有什么在这里讨厌的东西吗?

提前致谢

0 个答案:

没有答案