vue项目跨标签sessionStorage共享方案

我们项目如果是使用sessionStorage来共享数据,那么就存在跨标签时,sessionStorage失效的问题,此文卫大家分享解决此问题的一个思路

我们可以使用window.addEventListener 的这个时间和 localStorage 配合来实现sessionStorage共享,只需要在我们的main.js里面加入如下代码即可实现:

localStorage.setItem('storeIden', Date.now().toString())
window.addEventListener("storage", function(event){
if(!event.newValue){
return;
}
if(event.key === 'storeIden'){
// 简单key value 可以这样
localStorage.setItem("storeSessionData", JSON.stringify(sessionStorage))
localStorage.removeItem("storeSessionData")
console.log('旧标签进入')
} else if (event.key === 'storeSessionData') {
let obj = JSON.parse(event.newValue)
for(var key in obj){
sessionStorage.setItem(key, obj[key])
}
console.log('新标签进入')
}
})

以上代码解释如下:

当打开新页面storage发生了改变,他就会在旧页面去注册。

旧页面会进入到第一个if里面,第一个if主要是把session存入到localStorage里面,在第一个if里面,storage又发生了改变

此时他又会去新页面注册,而此时会进入到else if里面,此时将localStorage携带的参数传入到session里面,这样就达到了共享session的效果。

此代码我分别测试,当打开新页面时,新页面打印新标签进入,旧页面打印旧标签进入,测试符合预期。满足要求。


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img