简单的存储不是持久的会话之间的数据(Simple storage not persisting da

2019-10-23 12:35发布

我试图使用simplestorage从我的扩展,但我不能检索浏览器会话之间的值。 事情是这样的:从我的主代码,我创建了一个价值是这样的:

var ss = require("sdk/simple-storage");
ss.storage.foo = [{id:"bar1", properties:{a:"aaa", b:"bbb"}}]
console.log(ss.storage.foo);

这是确定的,我coud通过日志看到物体。 但后来我关闭浏览器,评论的“富定义”(2号线)和控制台日志是“ undefined ”。

我知道CFX默认运行使用新的配置文件每次运行时,这样简单的存储不会存留从一个运行到下一个。 但我使用

cfx -b firefox run --profiledir=$HOME/.mozilla/firefox/nightly.ext-dev

所以我敢肯定,我使用的是相同的配置文件每次。

可能是什么回事? 我在想什么? 任何想法是值得欢迎的! 提前致谢!

由于Notidart的答案,我能发现的问题是,当你以正确的方式关闭Firefox保存文件。 当你只是通过控制台杀死它,它不保存数据。

Answer 1:

这是存储多么简单的工作。 它会在您的文件夹ProfD文件夹这是您的配置文件目录: https://github.com/mozilla/addon-sdk/blob/master/lib/sdk/simple-storage.js#L188

let storeFile = Cc["@mozilla.org/file/directory_service;1"].
                getService(Ci.nsIProperties).
                get("ProfD", Ci.nsIFile);
storeFile.append(JETPACK_DIR_BASENAME);
storeFile.append(jpSelf.id);
storeFile.append("simple-storage");
file.mkpath(storeFile.path);
storeFile.append("store.json");
return storeFile.path;

制作该文件的确切位置是在您的个人资料文件夹,在文件夹名为Jetpack的那么你的插件ID,然后一个文件夹,名为简单的存储 ,然后在该文件夹名为store.json的文件。 示例路径:

ProfD/jetpack/addon-id/simple-storage/store.json

然后,它向文件中写入数据。 每次你的配置文件夹被重建(由于温度曲线的性质,因摩根大通/ CFX)的时候,你的数据被删除。

你应该只使用OS.File来创建自己的文件来保存数据。 OS.File是更好的方式则nsIFile这就是简单的存储一样。 保存它那外面ProfD文件夹,所以但一定要删除它在你的插件的卸载,否则你污染你的用户电脑



Answer 2:

万一别人使用时发现了这个问题jpm ,注意--profiledir从去除jpm ,所以做出jpm run使用相同的配置文件目录(从而相同的简单存储的数据),你必须与运行--profile选项可以在配置文件路径指向-没有配置文件名称。

jpm run --profile path/to/profile


Answer 3:

对于未来的读者,到@ Noitidart的使用建议的替代OS.File ,是使用低级别的API io/file

您可以使用一个文件fileIO.open(path) 。 如果该文件不存在,它将被创建。 你可以阅读并通过包括第二个参数写fileIO.open(path, mode)

该模式可以是:

  • r -只读模式
  • w -只写模式
  • b -二进制模式

它默认为r 您可以用它来读取和写入文件(显然该文件不能在ProfD文件夹或将得到每个JPM / CFX运行时删除)



文章来源: Simple storage not persisting data between sessions