我试图使用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保存文件。 当你只是通过控制台杀死它,它不保存数据。
这是存储多么简单的工作。 它会在您的文件夹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
文件夹,所以但一定要删除它在你的插件的卸载,否则你污染你的用户电脑
万一别人使用时发现了这个问题jpm
,注意--profiledir
从去除jpm
,所以做出jpm run
使用相同的配置文件目录(从而相同的简单存储的数据),你必须与运行--profile
选项可以在配置文件路径指向-没有配置文件名称。
jpm run --profile path/to/profile
对于未来的读者,到@ Noitidart的使用建议的替代OS.File
,是使用低级别的API io/file
您可以使用一个文件fileIO.open(path)
。 如果该文件不存在,它将被创建。 你可以阅读并通过包括第二个参数写fileIO.open(path, mode)
。
该模式可以是:
它默认为r
您可以用它来读取和写入文件(显然该文件不能在ProfD
文件夹或将得到每个JPM / CFX运行时删除)