Javascript sessionStorage 和 localStorage setItem QuotaExceededError:无法在“存储”上执行“setItem”:设置的值超出了配额。

QuotaExceededError the quota has been exceeded --- Firefox 报错解决 QuotaExceededError the quota has been exceeded — Firefox 报错解决 阅读详情
AI摘要

QuotaExceededError是一种DOM异常,指在Web存储中存储数据超配额限制。常见原因有存储过多数据、频繁存储等。解决方法包括检查清理数据、压缩数据、用替代存储方式、优化存储逻辑、捕获处理异常等,还给出优化存储示例及其他建议。

QuotaExceededError: Failed to execute 'setItem' on 'Storage': Setting the value of 'MANAGER-LAYOUT-DATA' exceeded the quota.

这个错误通常发生在尝试向浏览器的存储(如 localStorage 或 sessionStorage)中存储数据时,超过了浏览器为该存储分配的配额。下面我们将详细解释这个错误的原因以及如何解决它。

1. 理解 QuotaExceededError

什么是 QuotaExceededError?

QuotaExceededError 是一种 DOM 异常,表示尝试在 Web 存储中存储的数据超过了配额限制。Web 存储主要包括:

  • localStorage:持久化存储,数据不会随浏览器关闭而消失。
  • sessionStorage:会话存储,数据在浏览器会话结束时(如关闭标签页)会被清除。

浏览器存储配额

不同浏览器对 localStorage 和 sessionStorage 的配额有所不同,通常每个域名大约有 5MB 的存储空间。例如:

  • Chrome:大约 5MB
  • Firefox:大约 5MB
  • Safari:大约 5MB

超过这个限制后,再次调用 setItem 会抛出 QuotaExceededError。

2. 产生 QuotaExceededError 的常见原因

  1. 存储过多数据:尝试存储的数据总量超过了浏览器的存储限制。
  2. 频繁存储:频繁调用 setItem,特别是在循环或递归中,可能会迅速消耗存储配额。
  3. 存储大量大对象:如将大量的 JSON 对象或大字符串存储到 localStorage 中。
  4. 浏览器限制:不同浏览器对存储配额的限制不同,某些浏览器可能比其他浏览器更严格。

3. 解决方法

1. 检查和清理存储数据

首先,检查存储的数据是否有冗余,尝试清理不必要的数据。

// 清除特定键的数据
localStorage.removeItem('MANAGER-LAYOUT-DATA');

// 或者清除所有存储的数据
localStorage.clear();

2. 压缩数据

如果需要存储大量数据,可以考虑压缩数据,例如使用 LZString 库进行压缩。

npm install lz-string
import LZString from 'lz-string';

const data = { /* 你的数据 */ };
const compressedData = LZString.compress(JSON.stringify(data));

// 存储压缩后的数据
localStorage.setItem('MANAGER-LAYOUT-DATA', compressedData);

// 解压数据
const decompressedData = JSON.parse(LZString.decompress(localStorage.getItem('MANAGER-LAYOUT-DATA')));

3. 使用替代存储方式

如果数据量过大,可以考虑使用其他存储方式:

  • IndexedDB:适合存储大量结构化数据,支持异步操作。

    const request = indexedDB.open('MyDatabase', 1);
    
    request.onupgradeneeded = function(event) {
      const db = event.target.result;
      db.createObjectStore('MyStore', { keyPath: 'id' });
    };
    
    request.onsuccess = function(event) {
      const db = event.target.result;
      const transaction = db.transaction('MyStore', 'readwrite');
      const store = transaction.objectStore('MyStore');
      store.put({ id: 'MANAGER-LAYOUT-DATA', data: yourData });
    
      transaction.oncomplete = function() {
        db.close();
      };
    };
    
  • 服务器端存储:将数据存储在服务器上,通过 API 进行读写,减少客户端存储压力。

4. 优化存储逻辑

确保只存储必要的数据,避免存储重复或无用的信息。例如:

  • 分段存储:将数据分成多个部分存储,而不是一次性存储所有数据。
  • 延迟存储:仅在必要时存储数据,而不是每次数据变化时都存储。

5. 捕获和处理异常

在调用 setItem 时,捕获 QuotaExceededError 并进行相应处理。

function safeSetItem(key, value) {
  try {
    localStorage.setItem(key, value);
  } catch (e) {
    if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {
      console.warn('LocalStorage quota exceeded. Consider cleaning up some data.');
      // 例如,清理旧数据或提示用户
    } else {
      throw e;
    }
  }
}

safeSetItem('MANAGER-LAYOUT-DATA', yourData);

4. 示例:优化存储 MANAGER-LAYOUT-DATA

假设你在 React 应用中使用 localStorage 存储 MANAGER-LAYOUT-DATA,以下是一个优化的示例:

import React, { useState, useEffect } from 'react';
import LZString from 'lz-string';

const MyComponent = () => {
  const [layoutData, setLayoutData] = useState(null);

  useEffect(() => {
    // 从 localStorage 中获取并解压数据
    const compressedData = localStorage.getItem('MANAGER-LAYOUT-DATA');
    if (compressedData) {
      try {
        const decompressedData = JSON.parse(LZString.decompress(compressedData));
        setLayoutData(decompressedData);
      } catch (error) {
        console.error('Failed to parse MANAGER-LAYOUT-DATA:', error);
      }
    }
  }, []);

  const saveLayoutData = (data) => {
    try {
      const compressedData = LZString.compress(JSON.stringify(data));
      localStorage.setItem('MANAGER-LAYOUT-DATA', compressedData);
    } catch (e) {
      if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {
        console.warn('LocalStorage quota exceeded. Attempting to clean up.');

        // 例如,移除旧数据或提示用户
        localStorage.removeItem('MANAGER-LAYOUT-DATA');
        // 重新尝试存储
        try {
          const compressedData = LZString.compress(JSON.stringify(data));
          localStorage.setItem('MANAGER-LAYOUT-DATA', compressedData);
        } catch (err) {
          console.error('Failed to save MANAGER-LAYOUT-DATA after cleanup:', err);
        }
      } else {
        console.error('Failed to save MANAGER-LAYOUT-DATA:', e);
      }
    }
  };

  // 你的组件逻辑...

  return (
    <div>
      {/* 你的组件 JSX */}
    </div>
  );
};

export default MyComponent;

5. 其他建议

  • 监控存储使用情况:在开发过程中监控存储使用情况,避免在生产环境中突然遇到存储限制问题。
  • 用户提示:如果存储失败,可以向用户提示,并提供解决方案(如清理缓存)。
  • 分布式存储:如果应用需要存储大量数据,可以考虑将数据分布到多个存储键中,避免单个键的数据过大。

6. 总结

QuotaExceededError 是由于尝试存储的数据超过了浏览器的存储配额引起的。通过优化存储逻辑、压缩数据、使用替代存储方式以及处理异常,可以有效地避免和解决这个问题。根据你的具体需求,选择最合适的解决方案来管理和存储数据。

Web Storage配额超限:从QuotaExceededError到完整存储治理方案 Web Storage作为浏览器本地存储的核心技术,通过localStorage和sessionStorage为前端应用提供数据持久化能力。其工作原理基于同源策略,为每个域名分配独立的存储空间,标准配额通常为5MB。这一机制在保障用户隐私和系统性能的同时,也带来了存储容量限制的技术挑战。在实际工程实践中,存储空间管理不当会触发QuotaExceededError异常,导致应用功能异常,影响用户体验。特别是在单页应用(SPA)和复杂前端场景中,缓存数据、用户偏好、临时状态等都可能快速消耗配额。本文通过分析存储 阅读详情

相关推荐

localStorage存储上限与QuotaExceededError错误处理全解析

浏览器本地存储是前端开发中用于持久化数据的核心技术,其核心原理是通过同源策略为每个网站分配独立的存储空间。localStorage作为最常用的同步存储API,其存储上限并非固定的5MB,而是由浏览器动态管理的软性配额,这直接关系到应用的数据可靠性和用户体验。当存储空间耗尽时,浏览器会抛出QuotaExceededError错误,导致数据写入失败和功能异常。在工程实践中,开发者需要实现健壮的错误处理机制,结合容量监控和LRU自动清理策略,并设计分层存储降级方案,将IndexedDB作为大数据存储的首选。这些技

weixin_34242819的博客 320

若依防止表单重复提交报错

问题描述:前端request.js中 防止表单重复提交方法 当提交data大于5M时。2.大数据内容防止重复提交在后端处理,不在前端处理。3.前端单独配置请求repeatSubmit属性。1.最直接的办法====>干掉表单重复提交验证。

qq_50048558的博客 2133

前端本地存储容量限制解析:5MB存满后的处理策略与替代方案

在前端开发中,本地存储是关键技术之一,它允许网页在用户浏览器中持久化保存数据。其核心原理是基于同源策略的键值对存储机制,通过简单的API为开发者提供数据缓存能力。这一技术的价值在于提升应用性能、支持离线功能以及优化用户体验。然而,存储空间存在限制,通常每个源约为5MB,当数据量超过配额时会触发QuotaExceededError异常,导致写入失败。在实际应用场景中,如缓存用户操作日志或保存表单草稿时,必须考虑容量管理。本文聚焦于存储空间存满后的即时后果、错误处理机制以及数据清理策略,并探讨IndexedDB

weixin_33725807的博客 412

H5之localStorage限额报错quota

报错:Failed to execute 'setItem' on 'Storage': Setting the value of 'address' exceeded the quota. 场景:对常用地址做本地存储,减少后端请求 异常:在localStorage里面没有找到存储的数据,刷新页面重新请求接口 排查:浏览器console输出报Failed to execute 'setItem' on 'Storage': Setting the value of 'address' exceeded

zengfu123的博客 1万+

QuotaExceededError(解决方案).md

项目中碰到的,记录一下

Unity卡牌游戏UI框架:数据驱动与模块化设计实践

在Unity游戏开发中,UI系统是连接玩家与游戏逻辑的关键桥梁,其核心在于实现数据与表现的高效同步。数据驱动设计通过分离数据模型、逻辑状态与视图表现,利用观察者模式自动响应状态变化,确保了代码的清晰与可维护性。这种架构显著提升了开发效率,尤其在需要复杂状态管理和实时反馈的交互场景中,如卡牌游戏的拖拽、布局与动画系统。基于模块化思想,开发者可以将卡牌视图、布局管理、区域控制等组件像积木一样组合,快速构建出动态的手牌弧形布局、战场区域管理等特色功能。通过集成对象池、图集优化等性能方案,还能有效管理绘制调用与网格

weixin_34262482的博客 453

QuotaExceededError: Failed to execute ‘setItem‘ on ‘Storage‘: Setting the value of ‘sessionObj‘ exce

QuotaExceededError: Failed to execute 'setItem' on 'Storage': Setting the value of 'sessionObj' exceeded the quota.

weixin_45849417的博客 1332

使用VLC库实现视频播放器(WPF版)

使用wpf制作一个视频播放器 一、 LibVLCSharp介绍 LibVLCSharp是基于VideoLAN的LibVLC库的.NET平台的跨平台音频和视频API。它提供了一个全面的多媒体API,可以跨移动、服务器和桌面使用,以呈现视频和输出音频。支持Mono、.NET Framework和.NET核心运行时。在vs工具中,只需要安装截图中得两个nuget包。 二、视频播放器的实现 视频播放器的实现需要用到两个比较nuget包中提供的类,MediaPlayer类。MediaPlayer类型用于控

cangqiongxiaoye的博客 1万+

浏览器Uncaught QuotaExceededError错误(localStorage超出限额)

Web Storage网络存储 HTML5的Web Storage网络存储是指网络应用程序用于在网络浏览器存储方法和通讯协议,支持持久数据存储,类似于Cookie,以及window-local存储。网络存储又分为localStorage本地存储和sessionStorage会话存储。 localStorage 本地存储localStorage用于持久化的本地存储,除非主动删除数据,否则数据永远不

木易 3万+

智能驾驶域控(ADCU)方案介绍

本文主要对智能驾驶域控(ADCU)方案相关知识进行总结,以加深理解,及方便后续查漏补缺。

liuxu324的博客 1574

PCL1.12.1+VTK9.1+Qt5.14.2实战:解决QVTKOpenGLNativeWidget点云渲染窗口初始化报错问题

本文针对PCL1.12.1、VTK9.1与Qt5.14.2集成开发中,QVTKOpenGLNativeWidget点云渲染窗口初始化时出现的报错与黑屏问题,提供了深度分析与两种实战解决方案。核心在于理解VTK版本升级导致的渲染窗口类型不匹配,并指导开发者通过显式创建vtkGenericOpenGLRenderWindow或利用窗口ID嵌入,正确初始化并绑定可视化组件,从而稳定实现点云渲染。

weixin_29284657的博客 221

localStorage 与 sessionStorage 怎么存 JSON 数据?存储 API 完整用法

在浏览器应用里保存用户偏好、表单草稿或最近浏览记录时,常用的就是 Web Storage:`localStorage` 和 `sessionStorage`。但这两个 API 只能存字符串——直接把对象传给 `setItem()` 会得到 `"[object Object]"`,数据就丢了。33-js-concepts 项目的 [localStorage & sessionStorage](htt

gitblog_00841的博客 438

Diffusion、VAE与GAN:三大生成模型的原理对比与应用场景解析

本文深入解析了Diffusion、VAE与GAN三大生成模型的核心原理与特性。Diffusion模型通过逆向去噪过程实现高质量图像生成,但计算成本较高;VAE擅长学习概率潜空间,训练稳定但图像偏模糊;GAN通过对抗训练生成锐利图像,但存在模式崩溃风险。文章结合实战场景,为图像生成、修复、超分辨率等任务提供了清晰的模型选择指南。

weixin_29063979的博客 343

30 Seconds of Interviews:HTML5 Web Storage 精讲——localStorage 与 sessionStorage 的差异与实战

本文围绕开源面试题库 30 Seconds of Interviews 中收录的 HTML5 Web Storage 经典问题展开,系统讲解浏览器本地存储的底层机制,重点剖析 `localStorage` 与 `sessionStorage` 在**生命周期**与**作用域**两个维度上的本质差异,并结合 Cookies 的历史沿革、存储上限、安全性等面试高频考点给出实战总结。读完本文,你将能够准

gitblog_00380的博客 163

用Python玩转ROS机械臂:YOLO目标检测+MoveIt!自动抓取仿真教程

本文详细介绍了如何利用Python集成YOLO目标检测与ROS的MoveIt!运动规划库,实现机械臂的智能抓取仿真。通过Gazebo仿真环境,从视觉感知、坐标转换到运动规划与执行,构建了一套完整的自动化抓取系统,为机器人视觉抓取应用提供了可复现的实践方案。

ppp33的博客 552

【Unity动画优化插件】BT - OptiAnimX —— AAA级动画优化框架深度剖析

BT - OptiAnimX 是一款面向 Unity 的高性能动画优化框架,核心目标是解决多角色动画场景中的性能瓶颈问题。该插件对标《战争机器5》和《巫师3》等 AAA 游戏中的动画优化技术,通过一整套自动化与智能化的优化策略,将动画性能提升与视觉质量控制结合在一起。它适用于从移动端、VR 到高端 PC 的多平台项目,尤其在“多人角色 + 高频动画”的场景中表现突出,例如 MMO、开放世界、动作游戏等。BT - OptiAnimX 本质上是一套“动画性能调度系统”,而不仅仅是优化工具。

2403_88403568的博客 433

idea-claude-code-gui 前端性能优化指南:用内存缓存封装 localStorage、sessionStorage 与 Cookie 的同步读取

本文围绕仓库中 [.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md](https://link.gitcode.com/i/a70a8a794fb0b3ec46803d93897f354a) 这条性能规则展开,讲解为什么 `localStorage`、`sessionStorage`、`document.coo

gitblog_00924的博客 379

【K210+STM32项目】基于K210与STM32协同工作的智能垃圾分类系统设计与实现(更新3.0版本)(完整工程资料源码)

STM32F407STM32F407_2(含有app功能)

嵌入式技术开发 2491

Langfuse 前端实践:localStorage 数据的版本化与最小化存储指南

localStorage 是前端持久化用户偏好的首选方案,但无版本、无约束的写入会在 Schema 演进、多标签页并发、隐私模式下埋下隐患。本文以 Langfuse 开源仓库([web](https://link.gitcode.com/i/a0af436c38f2bfcb8c30d84cf4716043) 目录)中真实落地的 `useLocalStorage` Hook、一次性迁移机制(`one

gitblog_00451的博客 256

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Vue项目中LocalStorage的封装、响应式集成与工程化实践

在Web前端开发中,浏览器本地存储(Web Storage)是一项基础且关键的技术,它允许在客户端持久化存储键值对数据,解决了页面刷新后状态丢失的核心痛点。其核心原理是通过浏览器提供的localStorage和sessionStorage API,在用户本地进行数据读写,其中localStorage具有持久化特性,数据除非主动清除否则长期存在。这项技术的价值在于为前端应用提供了轻量级的本地数据管理能力,无需依赖服务端即可实现用户偏好、临时状态等信息的持久化。在Vue等现代前端框架的应用场景中,如何将loca

weixin_34178244的博客 422

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ZCode 客户端 localStorage 数据治理:Schema 版本化与最小化存储最佳实践

本指南围绕 ZCode 仓库内置的 Vercel React 最佳实践规则 `.agents/skills/react-best-practices/rules/client-localstorage-schema.md` 展开,系统讲解客户端 localStorage 的版本化命名、字段最小化与异常兜底三大核心实践。你会掌握带版本前缀的存取封装、跨版本数据迁移、以及只保留 UI 所需最小字段的方

gitblog_00365的博客 106

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ahooks useSessionStorageState 详解:将 React 状态持久化到 sessionStorage 的完整指南

`useSessionStorageState` 是 ahooks 中用于将 React 状态同步存储到浏览器 `sessionStorage` 的 Hook。本指南以该 Hook 的官方文档([index.zh-CN.md](https://link.gitcode.com/i/3650135af46d45a291f7b611fcc73c0d))为核心,结合其底层实现 [createUseSto

gitblog_00023的博客 782

useSessionStorageState 使用指南:基于 sessionStorage 的 React 状态持久化 Hook

`useSessionStorageState` 是 ahooks 中用于将 React 状态同步持久化到浏览器 `sessionStorage` 的 Hook,适用于表单草稿、页面内临时偏好、会话级数据等"关闭标签页即失效"的场景。本文以 [useSessionStorageState 官方文档](https://link.gitcode.com/i/f93c20fce60441119aa8b3

gitblog_00067的博客 198

Web应用数据隔离实战:基于隐私沙盒思想构建前端安全架构

在Web开发中,数据安全与隐私保护是构建可信应用的核心基础。其原理在于通过技术手段限制数据的访问边界,防止未授权泄露或滥用。这不仅能提升应用的安全性,也是遵循最小权限原则、满足GDPR等合规要求的关键实践。在广告投放、内容推荐、欺诈检测等场景中,如何在保护用户隐私的同时维持功能运行,成为重要课题。本文聚焦于应用级数据隔离,借鉴浏览器隐私沙盒的设计理念,提供一套涵盖运行时沙盒、存储命名空间和网络请求拦截的三层实战方案,帮助开发者在单页应用(SPA)和多租户SaaS平台中实现精细化的数据访问控制,有效管理第三方

weixin_33816821的博客 414

GA事件100%采集方案:IndexedDB+Cloudflare Worker四层防御架构

Google Analytics事件丢失是前端数据采集的普遍痛点,根源在于浏览器卸载、网络抖动、JS阻塞等导致sendBeacon或XHR失败。其本质是客户端事件传输缺乏持久化、确认机制与容错回补。基于IndexedDB异步存储、自定义GA代理实现响应头确认、服务端幂等回补三大核心技术,可构建高可靠事件管道。该方案兼顾GDPR合规性与工程落地性,适用于电商转化归因、A/B测试验证及数据基建升级场景,显著提升事件送达率与归因准确性。

cuiyingchan0663的博客 360

若依项目form表单过大报错Failed to execute ‘setItem’ on ‘Storage’: Setting the value of ‘sessionObj’ exceeded t

若依项目,富文本上传报错:Failed to execute ‘setItem’ on ‘Storage’: Setting the value of ‘sessionObj’ exceeded the quota.

夜空孤狼啸的博客 4767
上一篇: Javascript 在JS中删除对象的某个属性的几种方案
下一篇: Javascript IndexedDB 数据库
十方来财
十方来财 新星创作者: 编程框架技术领域 新星创作者: 编程框架技术领域
博客等级 码龄14年 8358粉丝 346原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十方来财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值