本地存储错误 - NS_ERROR_FILE_CORRUPTED - firefox

时间:2013-09-18 16:33:39

标签: javascript jquery firefox local-storage

我一直在使用Web应用程序,而且我正在使用本地存储。但对于一些Firefox用户,我注意到他们遇到以下错误:

  

NS_ERROR_FILE_CORRUPTED:组件返回失败代码:0x8052000b   (NS_ERROR_FILE_CORRUPTED)[nsIDOMStorage.setItem]

当它调用函数时:

function setLocalStorageItem(key, value){ 
        localStorage.setItem(key, JSON.stringify(value));
}

这是一种避免此错误的方法吗?

7 个答案:

答案 0 :(得分:33)

操作系统崩溃后,Firefox配置文件文件夹中的文件可能已损坏并导致非功能性网站(在我的情况下具有讽刺意味的是Firefox市场)。在这里,webappsstore.sqlite受到了影响。

用户@Oli在Ask Ubuntu

处表示
  

Firefox将其HTML5数据存储在名为webappsstore.sqlite的文件中。   这位于您的个人资料目录中,潜藏在某个地方   〜/ .mozilla / firefox / ....默认/(取决于你的个人资料   叫)。

     

将其移开并重新启动Firefox,一切都会到来   恢复生机。

更多:https://developer.mozilla.org/en/dom/storage

如果删除/移出您的个人资料文件夹,Firefox会构建一个新的,已清理的webappsstore.sqlite文件。 为我工作。
有关在何处查找个人资料文件夹的信息可以是accessed here

答案 1 :(得分:25)

这是一个浏览器级错误:您可能没有做错任何导致此错误。浏览器(或它使用的SQLite库)要么做错了,要么由于硬件问题导致文件处于无效状态。

除了加入Firefox开发团队并使浏览器的存储系统更具故障能力之外,您无法真正阻止此问题。似乎没有任何方法可以从此错误中恢复数据,因此您需要做的是检测此错误并告诉用户如何根据this MDN post吹走其浏览器存储空间:

try {
    setLocalStorageItem(key, value);
} catch(e) {
    if(e.name == "NS_ERROR_FILE_CORRUPTED") {
        showMessageSomehow("Sorry, it looks like your browser storage has been corrupted. Please clear your storage by going to Tools -> Clear Recent History -> Cookies and set time range to 'Everything'. This will remove the corrupted browser storage across all sites.");
    }
}

请注意,catch块应验证错误是NS_ERROR_FILE_CORRUPTED错误。我认为我对e.name的检查是正确的,但您应该自己验证。

答案 2 :(得分:2)

通过Firefox首选项清除所有内容可能无法完全清除损坏的SQLite文件所在的本地存储。

此时,您有两个选择:

localStorage.clear()
sessionStorage.clear()
  • 使用终端删除损坏的SQLite文件并强制Firefox重新构建它。

针对macOS用户的步骤:

  1. cd /Users/myusername/Library/Application Support/Firefox/Profiles/.....default/
  2. rm webappsstore.sqlite
  3. 使用TheConstructor中的该脚本验证没有其他文件损坏:

    for i in $(find . -name '*.sqlite'); do echo "$i"; echo "PRAGMA integrity_check;" | sqlite3 -bail "$i"; done

  4. 重新启动Firefox并重新加载页面。

答案 3 :(得分:1)

如果我们的客户之一出现此问题。

完全删除history和(我猜这是重要的部分)offline website data解决了这个问题。

(Firefox版 40.0.3

答案 4 :(得分:0)

不确定这是否有帮助,但我在Jira上遇到了这个问题。我重新启动了Firefox,禁用了插件,并对Jira进行了操作。然后我停止了Firefox,并在启用了Addons的情况下重新启动它,它再次运行。我不知道为什么这样有效:)我使用的是Firefox开发者版48.0a2(2016-05-24)

答案 5 :(得分:0)

MacOS Big Sur 上的 Firefox (11.4)

我被这个问题困扰了一个多月,希望有新版本的 Firefox 出现并修复它。至少在 2021 年 7 月 89.0.2 版本之前,我没有使用过。

所以,我有一个 LocalStorage 和 SessionStorage clear 解决方案的书签(在 other answer 中提到。)我的书签是 javascript:localStorage.clear();sessionStorage.clear();,每次我遇到一个页面时我都会点击它响应,Firefox 中的控制台 (F12) 显示此 NS_ERROR_FILE_CORRUPTED 错误。

但是,这很烦人,而且该解决方案在某些网站(例如 AWS)上不起作用。

我什至下载并重新安装了 Firefox 并清除了 ~/Library/Firefox~/Library/Mozilla,但它们也没有帮助。

解决方案:清除配置文件文件夹(然后恢复您的配置文件)

在 Firefox 中不要丢失我的书签和密码对我来说至关重要。

以下是最终对我有用的方法:

  1. 确保您在 Mozilla/Firefox 中创建一个帐户并打开同步。 (右上角的按钮。) 可选:在您的手机上安装 Firefox 并进行同步会很有帮助,以确保您有数据的实时备份,并且在出现问题时不会丢失密码和书签。

  2. 打开 Finder。转到~/Library/Application Support。将 Firefox 文件夹移至回收站。

  3. 重新启动 Firefox。 (我有一个 about:restartrequired 的书签,很方便。)

  4. 在 Firefox 中重新登录您的个人资料并同步。

注意事项

  1. 您的书签在书签栏中会出现乱序,在您第一次访问之前,它们的图标将是空白的。
  2. 您必须手动并一一登录每个帐户(例如 GMail)。如果您保存了密码,这应该很简单。

答案 6 :(得分:0)

所以当我遇到这个问题时,我参考了答案中的建议,但它们并没有真正帮助。并不是说不丢失历史记录和不必在每个站点上都重新登录对我来说至关重要

破坏 Firefox 配置文件中的整个 storage 目录有什么帮助

UPD:我以这种方式失去了添加配置

什么不起作用:

  • 删除 Firefox 配置文件目录中的 webappsstore.sqlite
  • 删除storage.sqlite
  • 使用其中一个答案中提到的脚本检查 sqlite 文件,它为所有文件返回 ok
  • 删除已损坏的特定网站的 sqlite 文件(在 storage 目录中)