我已经创建了一个基于localStorage的登录页面。
在加载页面时,我检查了localStorage的值。
如果我在多个标签页中打开网页,然后从其中一个标签页注销,所有剩余的页面都应该自动注销。
如果重新加载/刷新页面,那么就相当于登出。
请帮我编写一个脚本,当用户查看页面时运行它,或者说有其他方法可以解决这个问题。
我已经创建了一个基于localStorage的登录页面。
在加载页面时,我检查了localStorage的值。
如果我在多个标签页中打开网页,然后从其中一个标签页注销,所有剩余的页面都应该自动注销。
如果重新加载/刷新页面,那么就相当于登出。
请帮我编写一个脚本,当用户查看页面时运行它,或者说有其他方法可以解决这个问题。
您可以使用Storage events来在localStorage值更改时得到通知。
function storageChange (event) {
if(event.key === 'logged_in') {
alert('Logged in: ' + event.newValue)
}
}
window.addEventListener('storage', storageChange, false)
例如,如果其中一个标签注销:
window.localStorage.setItem('logged_in', false)
然后所有其他选项卡将收到一个StorageEvent
事件,并出现一个警报:
Logged in: false
我希望这回答了你的问题!
onfocus
事件检测用户何时再次将焦点切换到该标签页:"function onFocus(){
//Reload Page if logged out (Check localStorage)
window.location.reload();
};
if (/*@cc_on!@*/false) { // check for Internet Explorer
document.addEventHandler("focusin", onFocus);
} else {
window.addEventHandler("focus", onFocus);
}
这意味着您不会不断运行JavaScript,也不会同时重新加载(可能是大量的)标签页。
window.addEventHandler
代替。 - Jim O'BrienClear-Site-Data: "cookies", "storage", "executionContexts"
header('Clear-Site-Data: "cookies", "storage", "executionContexts"');
需要注意的关键是"executionContexts"
指令。从doc中可以得知:
"executionContexts"
表示服务器希望重新加载响应来源的所有浏览上下文(Location.reload)。
目前在某些浏览器(呃..IE/Edge)中的兼容性尚不确定,但大多数好的浏览器都支持此标头。