-
Notifications
You must be signed in to change notification settings - Fork 65
Description
描述你的功能需求
环境信息
扩展名称: 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.