Javascript 本地存储错误-NS\u错误\u文件\u损坏-firefox
我一直在一个web应用程序中工作,我正在使用本地存储。但对于一些Firefox用户,我注意到他们有以下错误: NS\u错误\u文件\u损坏:组件返回故障代码:0x8052000b (NS\u错误\u文件\u损坏)[nsIDOMStorage.setItem] 调用函数时:Javascript 本地存储错误-NS\u错误\u文件\u损坏-firefox,javascript,jquery,firefox,local-storage,Javascript,Jquery,Firefox,Local Storage,我一直在一个web应用程序中工作,我正在使用本地存储。但对于一些Firefox用户,我注意到他们有以下错误: NS\u错误\u文件\u损坏:组件返回故障代码:0x8052000b (NS\u错误\u文件\u损坏)[nsIDOMStorage.setItem] 调用函数时: function setLocalStorageItem(key, value){ localStorage.setItem(key, JSON.stringify(value)); } 这是一种避免此错误
function setLocalStorageItem(key, value){
localStorage.setItem(key, JSON.stringify(value));
}
这是一种避免此错误的方法?这是一个浏览器级别的错误:您可能没有做任何错误导致此错误。浏览器(或它使用的SQLite库)可能出错,或者由于硬件问题,文件处于无效状态 除了加入Firefox开发团队并提高浏览器存储系统的容错性之外,您无法真正防止这个问题。似乎没有任何方法可以从该错误中恢复数据,因此您要做的是检测该错误,并告诉用户如何根据以下内容清除浏览器存储:
请注意,
catch
块应验证错误是否为NS\u错误\u文件\u损坏
错误。我认为我对e.name
的检查是正确的,但你应该自己验证。在操作系统崩溃后,Firefox配置文件文件夹中的文件可能已损坏,并导致网站无法正常运行(在我的例子中,具有讽刺意味的是Firefox marketplace)。这里,webappsstore.sqlite
受到影响
正如user@Oli在
Firefox将其HTML5数据存储在一个名为webappsstore.sqlite的文件中。
它位于您的个人资料目录中,潜伏在
~/.mozilla/firefox/…默认/(取决于您的个人资料)
打电话)
把它移开,重新启动Firefox,一切都会好起来的
回归生活
更多:
如果从您的个人资料文件夹中删除/移出,Firefox将构建一个新的、经过清理的webappsstore.sqlite
文件。为我工作。有关在哪里可以找到您的个人资料文件夹的信息。我们的一个客户刚刚出现了这个问题 完全删除
历史记录
和(我想这是重要的部分)离线网站数据
解决了问题
(Firefox版本40.0.3)不确定这是否有帮助,但我在Jira上遇到了这个问题。我重新启动了Firefox,禁用了插件,并将其发送给Jira,它成功了。然后我停止Firefox并在启用插件的情况下重新启动它,它再次工作。我不知道这是为什么:)我使用Firefox Developer edition 48.0a2(2016-05-24)通过Firefox首选项清除所有内容可能无法完全清除损坏的SQLite文件所在的本地存储 此时,您有两个选项:
- 弹出打开控制台并通过Javascript命令清除存储(帽子提示:):
- 使用终端删除损坏的SQLite文件,并强制Firefox重建该文件李>
cd/Users/myusername/Library/Application Support/Firefox/Profiles/…default/
rm webappsstore.sqlite
表示i,单位为$(find.-name'*.sqlite');做回显“$i”;echo“PRAGMA integrity_check;”sqlite3-bail“$i”;完成
这些用户能否执行
getItem
?我认为这个错误意味着Firefox的localStorage
数据的文件级表示混乱,这是由于浏览器级错误或硬件问题(包括中所述的突然断电)。您知道他们正在运行哪个版本的Firefox吗?@Xeano Yes,是23号version@apsillers是的,getItem也有相同的错误,我和Jira/Confluence有过这个问题。在清除“离线网站数据”、删除我的Firefox配置文件文件夹中的存储.sqlite
并重新启动Firefox后,问题得到了解决。在FF50.0.1上,这里也有Jira问题。屏幕空白,无法选择项目。删除了设置->高级->网络->缓冲Webcontent->立即擦除下的脱机缓存,并重新启动了Firefox。在我的机器上也是webappsstore.sqlite
。在$(find.-name'*.sqlite')中为i使用;做回显“$i”;echo“PRAGMA integrity_check;”sqlite3-bail“$i”;在概要文件目录中完成
,以验证没有其他数据库被破坏。这对我来说很有效,因为一些有故障的软件损坏了我硬盘上的一些文件,其中包括webappsstore.sqlite
。谢谢这也解决了我在macOS上的问题。文件夹是:<代码> /用户/ MyUrNeNe/库/应用程序支持/ Firefox /Prime/..默认/ < /代码>。Mozilla的优秀开发人员应该考虑使系统更有弹性。如果缓存返回故障,则清除缓存,而不是使操作失败。在我们挖掘stackoverflow问题以找出浏览器缓存的内部以便手动删除它时,浪费了多少工时。只需控制台中的localStorage.clear()
,就为我解决了这个问题。我在使用TimeMachine恢复备份时遇到了这个问题。之后,macOS Firefox会在使用localstorage的地方给我带来问题。多亏了“macOS用户步骤”,它现在已经修复了。谢谢我在Atlassian上遇到了这个问题-他们的JavaScript代码试图加载一些损坏的东西,否则无法绕过它,但这个控制台魔术解决了它。这也正是引发我问题的原因。。。有人应该告诉他们有一个叫做Jira的东西可以帮助跟踪bug。在我的例子中,完整性检查很有效。另外一个方法是通过管道将输出传输到一个文件,然后查找不正常的DBs。在我的例子中,它发现了一个损坏的索引,可以使用重建。
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.");
}
}
localStorage.clear()
sessionStorage.clear()