上午,
我的Firefox扩展程序将生成,保留和使用一些基于文本的数据。目前,我不打算在不同计算机上的Firefox之间进行同步。我只需要将数据写入文本文件并提取它们。考虑到这一点,我的问题是:
我应该在哪里保留这些数据?我的意思是,在<profile>/extensions
文件夹中,我有*.xpi
文件(这是某种类型的zip文件),并且没有专门用于我的扩展名的文件夹。我是否需要创建一个特殊文件夹并将我的数据保存在此文件夹中的文本文件中?或者还有其他更合适的方法吗?
我的数据将是这样的:
key1, value1, value2, value3, value4 key2, value1, value2, value3, value4 key3, value1, value2, value3, value4
请您推荐一下写/读这些字符串的最佳方法吗?典型的纯JavaScript写入/追加/读取,或使用JSON
或类似的东西?
谢谢, 浣熊
答案 0 :(得分: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"]);
另请参阅File I/O Snippets page了解详情。
如果您有多个文件,最好在ProfD
为您的扩展程序创建一个专用子文件夹。
请勿将数据保存在extensions/
中!这可能会使附加组件管理器感到困惑。此外,在创建解压缩的扩展时,请不要将数据保留在扩展名目录中,因为在更新期间该文件夹将被清除。
您如何编写数据取决于您。 SQLite (Storage)对于几个字符串可能有点过分,但如果你有大量数据(多兆字节)并且还需要快速随机查找,那就太棒了。纯文本文件或JSON.stringify
编码数据可能更好。此外,如果您的数据足够“小”,您可以改用“首选项服务”,避免使用实际文件。
顺便说一句:你可以使用XMLHttpRequest
很容易地从文件系统中读回文本(JSON)和/或xml数据(当然,你不能用它来写数据)。
SDK加载项可能仍然使用上面的文件I / O内容(SDK io/file
模块目前使用IMO太有限了)。 SDK还提供专用的indexed-db
和simple-prefs
模块。
答案 1 :(得分:1)
SQLite is built in最新版本的Firefox用作数据存储机制。有关如何使用FF包装器API的更多信息和示例,请参见MDC。
另一种选择可能是使用Local nsIFiles来保存数据。
答案 2 :(得分:1)
最简单的方法是使用localStorage。 Firefox在配置文件文件夹中创建存储,并在用户卸载插件后自动删除它。作为副作用,您可以重复使用代码进行chrome和safari扩展