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中。 你有什么在这里讨厌的东西吗?
提前致谢