当前位置: 首页 > news >正文

多页面localStorage覆盖问题

目录

1.背景

2.根本原因

3.解决方案


1.背景

接口调用平台为了提高体验性,切换环境和新打开页面时,能获取到之前在页面已经填写的一些信息,于是将这些信息存储到localStorage中,如下:

2.根本原因

  1. localStorage 的特性

    • 同源策略:同一域名下的所有页面共享同一个 localStorage
    • 同步操作:读写操作是同步且立即生效的
    • 无作用域隔离:所有标签页/窗口共享相同存储空间
  2. 典型场景
// 页面A
localStorage.setItem('key', 'valueA');// 页面B(同时打开)
localStorage.setItem('key', 'valueB'); // 会覆盖页面A的值

3.解决方案

方案1:使用页面唯一标识符

// 页面加载时生成唯一ID
const pageId = `page_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;// 存储数据时添加前缀
function savePageData(data) {localStorage.setItem(`${pageId}_data`, JSON.stringify(data));
}// 读取数据
function loadPageData() {return JSON.parse(localStorage.getItem(`${pageId}_data`));
}

方案2:使用 sessionStorage(如果适用)

// 数据只在当前会话有效,不同标签页隔离
sessionStorage.setItem('key', 'value');

方案3:状态管理 + 存储合并,将当前页面的data数据重新存储到sessionStorage

// 1. 使用统一的数据结构
const store = {page1: { /* 数据 */ },page2: { /* 数据 */ }
};// 2. 保存时合并现有数据
function saveData(pageKey, data) {const allData = JSON.parse(localStorage.getItem('app_data')) || {};allData[pageKey] = data;localStorage.setItem('app_data', JSON.stringify(allData));
}

方案4:使用 BroadcastChannel API 同步

// 所有页面监听存储变化
const channel = new BroadcastChannel('storage_sync');channel.addEventListener('message', (event) => {if (event.data.type === 'storage_update') {// 更新本地数据}
});// 修改存储时通知其他页面
function safeSetItem(key, value) {localStorage.setItem(key, value);channel.postMessage({type: 'storage_update',key,value});
}

不同方案试用场景

方案适用场景优点缺点
唯一ID需要严格隔离完全隔离需要自己管理清理
sessionStorage临时数据自动隔离页面关闭丢失
数据合并需要共享部分数据灵活实现复杂
BroadcastChannel实时同步即时更新兼容性要求

我的场景:第一次打开页面时,希望加载历史数据,所以关闭页面不能丢失,所以不能用sessionStorage,采用数据合并的方式,将当前页面的数据重新存储到localStorage,这样每次都保存最后一次页面的localStorage数据。完美解决。

http://www.dtcms.com/a/412478.html

相关文章:

  • 网站建设钅金手指排名找网络公司做推广费用
  • 前端实验(二)模板语法
  • 产品外包装设计网站织梦调用wordpress
  • 黑龙江建设教育网站做ag视频大全网站
  • 网站开发绪论手机商城网站制作
  • 未来做那些网站能致富一类电商平台都有哪些
  • 室内设计网站官网大全xampp用wordpress
  • 网站后台管理代码app开发多少钱
  • 网站安全评估怎么做网站宣传推广策划
  • 做司法亲子鉴定网站手机网站个人中心源码
  • 优质网站建设的设计要点自定义wordpress
  • 黑牛网站建设汽车html静态网站
  • 高速建设材料在哪个网站购买福州网站建设优质服务商
  • 拓者设计吧模型免费下载搜索排名优化公司
  • 做网站初中网站搭建公司排行
  • 网站设计psd站长seo工具
  • 学室内设计需要什么学历seo的作用主要有
  • 北京网站设计济南兴田德润团队怎么样上海 网站建设公司
  • Docker镜像私有仓库
  • 网站正在建设中页面 英文翻译wordpress表情无插件
  • 设计logo网站侵权吗知乎网站备案 通知
  • 做网批的网站wordpress 阿里云点播
  • 找公司做网站需要注意南宁江南区网站制作多少钱
  • 建立网站的文案怎么写广告平台有哪些 互联网
  • 网站做的好的公司名称wordpress自定义搜索当前页
  • Spring Boot 自动配置之 TaskExecutor
  • 重庆网站制作有名 乐云践新自己电脑做网站服务器系统
  • AES加密/解密算法
  • 用网站做微信公众号台州做网站seo
  • 如何让网站互动起来ts431p 做网站