目标是如果未找到用户注销或localStorage
,则应自动重定向到登录页面,并将注销同一浏览器中所有打开的选项卡。如果用户按下注销按钮,它将重定向到登录页面,否则,如果用户手动清除浏览历史记录(此时localStorage
似乎为空),它将自动重定向到登录页面。如果使用单个选项卡打开以下代码,并且他删除了浏览器历史记录(localStorage
为空),则以下代码不起作用。有任何建议吗?
function signOutAllTab() {
var allTabLogOut = 'allTabLogOut';
try {
localStorage.setItem(allTabLogOut, allTabLogOut);
//localStorage.removeItem(allTabLogOut);
return true;
} catch (e) {
return false;
}
}
window.addEventListener('storage', function (event) {
if (event.key == 'logout-event') {
window.location = 'signin?logoutAllTabs=yes';
}
}, false);
$(document).ready(function () {
if (signOutAllTab() && signOutTabs) {
$('#allSignOut').on('click', function () {
localStorage.setItem('logout-event', 'logout');
return true;
});
setInterval(function () {
if (!localStorage.getItem("allTabLogOut"))
localStorage.setItem('logout-event', 'logout' + Math.random());
}, 1000);
}
});
关于
Sasi
答案 0 :(得分:0)
单个选项卡不起作用是因为,当同源页面的页面修改本地存储时,其余同源页面在注册后立即触发存储事件。就像一个标签正在注视其他标签的更改一样。如果您想要单键手表本身,则可以这样编写代码:
var orignalremoveItem = localStorage.removeItem;
localStorage.removeItem = function(key,newValue){
var removeItemEvent = new Event("removeItemEvent");
removeItemEvent.key = key;
window.dispatchEvent(removeItemEvent);
orignalremoveItem.apply(this,arguments);
};
window.addEventListener("removeItemEvent", function (e) {
if(localStorage.getItem("token")){
if(e.key=='token'){
alert("token,delete success");
}
}else{
alert("no token")
}
});
localStorage.removeItem('token');