我可以检索不再存在的 URL 的 Firefox localStorage 数据吗?

我可以检索不再存在的 URL 的 Firefox localStorage 数据吗?

这个问题有点奇怪,但基本情况是这样的。

不久前,我编写了一个基本的小型待办事项应用程序,供公司内部网络上的一些同事使用,并将其托管在共享驱动器上。为了实现持久性,而无需设置 Web 服务器,用户数据存储在浏览器的 localStorage 中。

最近,系统管理员一直在重新设计网络驱动器寻址系统,这导致我的小应用程序的 URL 发生变化。当然,这意味着页面不再能够访问相同的 localStorage 对象,并且任何使用我的应用程序的人现在都“丢失”了他们的数据,即使这些数据仍然存储在 Firefox 的某个地方。(我们都在使用Firefox 31Windows 7的,以防万一发生任何变化。)

那么问题是,我可以检索 localStorage 数据吗?我的第一个想法(虽然很不成熟)是让用户在其hosts文件中添加一个条目,将旧 URL 指向另一个将导出数据的文件(或者,指向一个普通文件并在 Web 控制台中手动获取数据)。但是,正如您可能已经猜到的那样,该hosts文件已被锁定,而我们没有管理员权限。

最后要说的是,我知道有各种可以帮助 localStorage 的 Firefox 插件,但正如我之前提到的,这一切都发生在一个孤立的企业网络上,因此为了这么一个简单的原因而引入插件是行不通的。

有什么想法吗?

答案1

为了方便阅读,我发现 localStorage 数据存储在webappsstore.sqliteFirefox 配置文件目录中的一个名为 sqlite 文件中。在 Windows 上,可以在 找到它%APPDATA%\Mozilla\Firefox\Profiles\{profile ID}\webappsstore.sqlite。为了读取其内容,我使用了一个使用该包的小 Python 脚本sqlite3

import os, sqlite3
profiles = os.path.join(os.environ('APPDATA'),'Mozilla\\Firefox\\Profiles')
profile = os.path.join(profiles, os.listdir(profiles)[0])
db = os.path.join(profile,'webappsstore.sqlite')
print([entry.encode('utf-8') for entry in sqlite3.connect(db).iterdump()])

(我使用的是 Python 3,不确定 Python 2 版本的 sqlite3 是否存在差异。)

这将输出大量数据;我建议重定向到文件中。数据将以 SQL 数据创建语句的形式出现。本地存储中的每个条目在表中都有一个与之关联的域和键。URL 在数据库中始终是反向书写的。您要查找的内容类似于以下内容:

INSERT INTO "webappsstore2" VALUES('moc.elpmaxe.www.:https:443','myLocalStorageKey','{"key":"value","pairs":["go","here"]}')

您会在输出中的某处找到您的 localStorage 键值对。

相关内容