window.localStorage.setItem() 报错

window.localStorage.setItem() 报错

码农世界 2024-05-15 前端 56 次浏览 0个评论

目录标题

    • 一、原因
    • 二、快速解决
    • 三、彻底解决

      一、原因

      在使用sessionStorage做缓存处理时,报了如上的错误提示,经查是sessionStorage对大小是有限制的,所以要进行try catch,500KB左右的东西保存起来就会令到Resources变卡,2M左右就可以令到Resources卡死,操作不了,5M就到了Chrome的极限,而超过之后就会抛出上述异常。

      二、快速解决

      F12 选择服务器地址,右键清楚。注意:这种方式治标不治本,后面依旧会有问题。

      三、彻底解决

      参考:window.localStorage.setItem() 缓存超额

      addSessionStorage (key, storeObj) {
            //定义一个前缀,表示只删除自己定义的缓存
            const cachePrefix = 'SERVICE_QR_';
            try {
              sessionStorage.setItem(cachePrefix + key, JSON.stringify(storeObj));
            } catch (e) {
              // sessionStorage容量不够,根据保存的时间删除已缓存到 sessionStorage
              if (e.name.toUpperCase().indexOf('QUOTA') >= 0) {
                let item;
                const tempArr = [];
                // 先把所有的缓存对象来出来,放到 tempArr 里
       
                for (item in sessionStorage) {
                  if (item.indexOf(cachePrefix) === 0) {
                    tempArr.push(JSON.parse(sessionStorage[item]));
                  }
                }
                // 如果有缓存对象
                if (tempArr.length) {
                  // 按缓存时间升序排列数组
                  tempArr.sort((a, b) => a.stamp - b.stamp);
                  // 删除缓存时间最早的
                  sessionStorage.removeItem(tempArr[0].key);
                  // 删除后在再添加,利用递归完成
                  this.addSessionStorage(key, storeObj);
                }
              }
            }
       
          },
      

转载请注明来自码农世界,本文标题:《window.localStorage.setItem() 报错》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,56人围观)参与讨论

还没有评论,来说两句吧...

Top