1

早晨,

我的 Firefox 扩展将生成、保存和使用一些基于文本的数据。目前,我不会让它在不同计算机上的 Firefox 之间同步。我需要的只是将数据写入文本文件并提取它们。考虑到这一点,我的问题是:

  1. 我应该将这些数据保存在哪里?我的意思是,在<profile>/extensions文件夹中,我有我的*.xpi文件(这是某种 zip 文件)并且没有用于我的扩展的专用文件夹。我是否需要创建一个特殊文件夹并将我的数据保存在该文件夹内的文本文件中?或者还有其他更合适的方法吗?

  2. 我的数据将是这样的:

key1, value1, value2, value3, value4
key2, value1, value2, value3, value4
key3, value1, value2, value3, value4

您能否推荐编写/读取这些字符串的最佳方法?典型的纯 JavaScript 写入/附加/读取,或使用JSON或类似的东西?

谢谢,浣熊

4

3 回答 3

3

通常将数据保存在配置文件文件夹中。ProfD

Components.utils.import("resource://gre/modules/FileUtils.jsm");

// get the "data.txt" file in the profile directory
var file = FileUtils.getFile("ProfD", ["data.txt"]);

另请参阅文件 I/O 片段页面了解更多信息。

如果您有多个文件,最好ProfD为您的扩展创建一个专用的子文件夹。

请勿将数据保存在extensions/! 这可能会使附加管理器感到困惑。此外,在创建解压扩展时,不要将数据保存在扩展目录中,因为该文件夹将在更新期间被清除。

如何写入数据取决于您。SQLite(存储)对于几个字符串来说可能是多余的,但如果您有大量数据(数兆字节)并且还需要快速随机查找,那就太好了。纯文本文件或JSON.stringify编码数据可能会更好。此外,如果您的数据足够“小”,您可以使用 Preferences Service 来代替,而不必弄乱实际文件。

顺便说一句:您可以使用 s 从文件系统中轻松读取文本 (JSON) 和/或 xml 数据XMLHttpRequest(当然,您不能使用它来写入数据)。

SDK 插件可能仍然使用上面的文件 I/O 东西(SDKio/file模块目前太有限,无法使用 IMO)。SDK 还提供专用indexed-dbsimple-prefs模块。

于 2013-09-21T14:26:12.163 回答
1

SQLite 内置在最新版本的 Firefox 中,用作数据存储机制。更多信息,以及如何使用 FF 包装器 API 的示例,可以在MDC上找到。

另一种选择是使用Local nsIFiles来持久化数据。

于 2013-09-21T14:22:08.557 回答
1

最简单的方法是使用 localStorage。Firefox 在配置文件文件夹中创建存储,并在用户卸载插件后自动将其删除。作为副作用,您可以将代码重用于 chrome 和 safari 扩展

于 2013-09-22T12:15:06.113 回答