【问题标题】:Error in local storage - NS_ERROR_FILE_CORRUPTED - firefox本地存储错误 - NS_ERROR_FILE_CORRUPTED - firefox
【发布时间】:2013-09-23 12:46:27
【问题描述】:

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

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

当它调用函数时:

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

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

【问题讨论】:

  • 这些用户可以执行getItem 吗?我预计这个错误意味着 Firefox 的 localStorage 数据的文件级表示被搞砸了,由于浏览器级错误或硬件问题(包括突然断电,如 askubuntu.com/q/110649/164449 中所述)。
  • 你知道他们运行的是哪个版本的火狐吗?
  • @Xeano 是的,这是 23 版本
  • @apsillers 是的,getItem 也有同样的错误
  • 我在使用 Jira/Confluence 时遇到了这个问题。清除“离线网站数据”,在我的 Firefox 配置文件文件夹中删除 storage.sqlite,然后重新启动 Firefox,问题得到解决。

标签: javascript jquery firefox local-storage


【解决方案1】:

因此,当我遇到此问题时,我仔细阅读了答案中的建议,但它们并没有真正帮助。请注意,不丢失历史记录对我来说至关重要,最好不要在每个站点上重新登录

对 Firefox 配置文件中的整个 storage 目录进行核对有帮助

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

什么不起作用:

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

【讨论】:

    【解决方案2】:

    MacOS Big Sur 上的 Firefox (11.4)

    我在这个问题上生活了一个多月,希望新版本的 Firefox 能够出现并得到修复。至少在我目前使用的版本 89.0.2, July 2021 92.0 Sep 2021 之前,我没有。

    为什么会这样?

    正如其他答案所提到的,当您的机器崩溃并且 Firefox 将其 sqlite 存储文件留在磁盘上处于损坏状态时,就会发生这种情况。是的,Mozilla 应该更有弹性,但事实并非如此。 :(

    我现在该怎么办?

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

    我发现您可以尝试 3 种解决方案。根据损坏文件的严重程度,其中一个可能有效。


    方案一:清除localStorage和sessionStorage

    按 F12(工具 > 浏览器工具 > 浏览器控制台)并粘贴

    localStorage.clear();sessionStorage.clear()
    

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

    但是,这很烦人,而且此解决方案不适用于某些网站(例如 AWS 或 Jira)。


    解决方案 2:手动删除某些 sqlite 文件

    基于 other answers(和来自 TheConstructor 的 the comment),您可以在终端中执行以下操作:

    1. 转到~/Library/Application Support/Firefox/Profiles/
    2. ls -al 然后cd 进入最近触及的文件夹。 (如果您有一个 Mozilla 帐户来与您的手机同步书签和密码,则您不是默认设置。)
    3. 运行for i in $(find . -name '*.sqlite'); do echo "$i"; echo "PRAGMA integrity_check;" | sqlite3 -bail "$i" 2>&1; done | grep -v ok | grep -v locked 并查找不是./xxx/yyy.sqlite 的任何输出。 (例如Main freelist: size is 0 but should be 4。)错误上方的文件是损坏的文件。
    4. 移走损坏的文件。 (rm 他们,或mv 其他地方。)
    5. 重新启动 Firefox。 (我有一个about:restartrequired 的书签,很方便。)

    它应该有望以最小的损害解决问题。


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

    如果解决方案 2 不起作用,则必须清除配置文件的整个本地数据。

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

    这是最终对我有用的方法:

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

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

    3. 重启火狐。 (我有一个方便的about:restartrequired 书签。)

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

    注意事项

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

    【讨论】:

      【解决方案3】:

      通过 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 并重新加载页面。

      【讨论】:

      • 控制台中的 localStorage.clear() 为我解决了这个问题。
      • 我在使用 TimeMachine 恢复备份时遇到了这个问题。之后,macOS Firefox 会给我使用 localstorage 的问题。感谢“macOS 用户的步骤”,它现在已经修复。谢谢!
      • 我在 Atlassian 上遇到了这个问题 - 他们的 JavaScript 代码试图加载损坏的东西,否则无法绕过它,但这个控制台魔法修复了它。
      • 这也正是引发我的问题的原因......有人应该告诉他们有一个叫做 Jira 的东西可以帮助跟踪错误。
      • 完整性检查在我的情况下运行良好。一项补充是将输出通过管道传输到文件,然后查找不正常的 DB。在我的情况下,它发现了一个损坏的索引,可以用 sqlite.org/lang_reindex.html 重建。
      【解决方案4】:

      不确定这是否有帮助,但我在 Jira 上遇到了这个问题。我在禁用插件的情况下重新启动了 Firefox,然后转到 Jira 并成功了。然后我停止了 Firefox 并在启用插件的情况下重新启动它,它再次工作。我不知道为什么会这样 :) 我使用的是 Firefox Developer edition 48.0a2 (2016-05-24)

      【讨论】:

      • FF50.0.1 上的 Jira 问题也在这里。空白屏幕,无法选择项目。在 Settings->Advanced->Network->Buffered Webcontent->Erase now 下删除了离线缓存并重新启动了 Firefox。
      【解决方案5】:

      我们的一位客户刚刚遇到了这个问题。

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

      (火狐版本40.0.3

      【讨论】:

        【解决方案6】:

        在操作系统崩溃后,Firefox 配置文件夹中的文件可能已损坏并导致网站无法正常运行(在我的例子中,具有讽刺意味的是 Firefox 市场)。在这里,webappsstore.sqlite 受到了影响。

        正如用户@Oli 在Ask Ubuntu 所说的那样

        Firefox 将其 HTML5 数据存储在名为 webappsstore.sqlite 的文件中。 它位于您的个人资料目录中,该目录潜伏在某处 ~/.mozilla/firefox/..default/(取决于您的个人资料 调用)。

        把它移开并重新启动 Firefox,一切都会好起来的 起死回生。

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

        如果从您的配置文件文件夹中删除/移出,Firefox 会构建一个新的、经过清理的 webappsstore.sqlite 文件。 为我工作。
        在哪里可以找到您的个人资料文件夹的信息可以是accessed here

        【讨论】:

        • 在我的机器上也是webappsstore.sqlite。在配置文件目录中使用for i in $(find . -name '*.sqlite'); do echo "$i"; echo "PRAGMA integrity_check;" | sqlite3 -bail "$i"; done 来验证没有其他数据库被破坏
        • 这对我有用,因为一些故障软件损坏了我硬盘上的一些文件,webappsstore.sqlite 就是其中之一。谢谢!
        • 这也解决了我在 macOS 上的问题。文件夹是:/Users/myusername/Library/Application Support/Firefox/Profiles/.....default/
        • mozilla 的优秀开发人员应该考虑让系统更具弹性。如果缓存返回失败,则清除缓存而不是使操作失败。我们浪费了多少工时来挖掘 stackoverflow 问题以找出浏览器缓存的内部结构,以便我们可以手动删除它。
        【解决方案7】:

        这是一个浏览器级别的错误:您可能没有做错任何事情导致此错误。浏览器(或其使用的 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 的检查是正确的,但您应该自己验证。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-24
          • 2022-11-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多