Skip to content

保存按钮无响应 - localStorage 存储配额超限 #266

@Gravity-png

Description

@Gravity-png

描述你的功能需求

环境信息
扩展名称: LinuxDo Scripts
扩展版本: 1.5.5
浏览器: Chrome
浏览器版本: 141.0.7390.55 (正式版本)
操作系统: Windows
⚠️ 问题根因
通过控制台调试发现,问题的真正原因是 localStorage 存储配额超限:

QuotaExceededError: Failed to execute 'setItem' on 'Storage':
Setting the value of 'linuxdoscriptssettingDMI' exceeded the quota.
at Proxy.save (content.js:457:11206)
at Proxy.saveload (content.js:457:11354)
问题描述
在 LinuxDo 论坛 (linux.do) 长期使用扩展后,点击"保存"和"保存并刷新"按钮无响应。这是因为 linuxdoscriptssettingDMI 存储的数据量超过了浏览器的 localStorage 配额限制(通常为 5-10MB)。

重现步骤
长期使用 LinuxDo Scripts(积累大量数据)
打开 LinuxDo 论坛任意页面
打开扩展设置
修改任意设置
点击"保存"或"保存并刷新"按钮
按钮无响应,控制台报 QuotaExceededError
临时解决方案
清除 localStorage 数据后恢复正常:

F12 → 应用(Application) → 本地存储空间(Local Storage) → https://linux.do
右键清除所有数据
刷新页面
期望的修复方案
迁移到 chrome.storage.local API ⭐ 强烈推荐
为什么要迁移?

localStorage 限制:5-10MB(已达上限)
chrome.storage.local:默认 10MB,可申请 unlimited 权限后无限制
参考:油猴脚本使用 GM_setValue/GM_getValue,也不受 localStorage 限制
迁移示例:

javascript
// 旧代码(localStorage)
localStorage.setItem('linuxdoscriptssettingDMI', JSON.stringify(data));
let data = JSON.parse(localStorage.getItem('linuxdoscriptssettingDMI'));

// 新代码(chrome.storage.local)
chrome.storage.local.set({ linuxdoscriptssettingDMI: data });
chrome.storage.local.get(['linuxdoscriptssettingDMI'], (result) => {
let data = result.linuxdoscriptssettingDMI;
});
额外优势:

异步操作,不阻塞 UI
自动处理大对象,无需 JSON.stringify
更适合扩展使用(Chrome 官方推荐)
彻底解决存储空间不足问题
期望行为
点击"保存"按钮后,应该保存相关设置/内容
点击"保存并刷新"按钮后,应该保存设置并刷新页面

实际行为
点击两个按钮后完全没有反应,既没有保存成功的提示,也没有任何错误信息

技术细节
存储键名: linuxdoscriptssettingDMI
错误位置: content.js:457:11206 (Proxy.save)
浏览器限制: localStorage 通常限制为 5-10MB
问题影响: 用户无法保存任何设置,且没有错误提示
附加信息
该问题在 IDC 论坛不会出现(可能使用时间较短,数据未超限)
无痕模式下正常(因为是全新的存储空间)
这是一个随使用时间逐渐出现的问题
调试截图
控制台错误信息:

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    feature请求新功能支持

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions