Firefox SDK简单存储在重启后丢失关联数组数据

时间:2014-08-07 13:39:15

标签: javascript arrays json firefox-addon firefox-addon-sdk

关于

我正在使用Firefox SDK加载一个插件。在插件中,我存储了一个带有简单存储的关联数组。


代码

关联数组我用简单的首选项存储

var spammer = [];
spammer['id'] = res[0];
spammer['username'] = res[1];
spammer['date'] = res[2];

ss.storage.spammers.push(spammer);

console.log(ss.storage.spammers[i]['id']);
console.log(ss.storage.spammers[i]['username']);
console.log(ss.storage.spammers[i]['date']);

这似乎有效,而附加组件处于活动状态时会记录正确的值。

screenshot1

然而,当我在浏览器中运行以下代码时

require("sdk/tabs").on("ready", function(tab) {
    for (i = 0; i < ss.storage.spammers.length; i++) {
        console.log(ss.storage.spammers[i]['id']);
        console.log(ss.storage.spammers[i]['username']);
        console.log(ss.storage.spammers[i]['date']);
    }
});

但是现在当我运行代码时,运行“未定义”值会被记录

screenshot2

(前3个行是使用simple-prefs存储的前一个会话,3个工作行来自新会话)

  • 正确的日志数量,因此存在正确的值数
  • 我正确使用SDK配置文件


问题

是不可能将关联数组存储为简单存储,还是其他问题?

2 个答案:

答案 0 :(得分:1)

var spammer = [];
spammer['id'] = res[0];
spammer['username'] = res[1];
spammer['date'] = res[2];

ss.storage.spammers.push(spammer);

console.log(ss.storage.spammers[i]['id']);
console.log(ss.storage.spammers[i]['username']);
console.log(ss.storage.spammers[i]['date']);

var spammer = [];更改为var spammer = {};

答案 1 :(得分:0)

解决方案[by erikvold]

我目前正在运行的代码:

if (!ss.storage.spammers)
{
    ss.storage.spammers = [];
}

var spammer = {};
spammer.userid = res[0];
spammer.username = res[1];
spammer.date = res[2];

ss.storage.spammers.push(spammer);

console.log(ss.storage.spammers[i].userid);
console.log(ss.storage.spammers[i].username);
console.log(ss.storage.spammers[i].date);