Событие «Хранилище» сработало на той же вкладке в Firefox - PullRequest
0 голосов
/ 22 мая 2018

В 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, поэтому нет другого объекта 'window'.Кажется, это происходит только в Firefox, но они сказали мне, что это может произойти и в Chrome, даже если я никогда не видел это лично.У вас есть подсказка, что здесь происходит?

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...