33

在 Google Chrome 扩展程序中,我想使用chrome.storage.local(而不是 localStorage),因为:

  1. 使用键值对,值可以是任何对象(而不是仅字符串)
  2. 使用 setter 更改数据模型storage.set可以触发事件侦听器

使用storage.set,我怎样才能有一个变量键名?

注意:如果我不使用 setter,我可以这样做storage[v1],但对对象的更改不会触发事件侦听器。

var storage = chrome.storage.local;
var v1 = 'k1';

storage.set({v1:'s1'});

storage.get(v1,function(result){
    console.log(v1,result);
    //console output = k1 {}
});
storage.get('v1',function(result){
    console.log(result);
    //console output = {v1:'s1'}
});
4

2 回答 2

45

这就是你要找的东西吗?

var storage = chrome.storage.local;

var v1 = 'k1';

var obj= {};

obj[v1] = 's1';

storage.set(obj);

storage.get(v1,function(result){
  console.log(v1,result);
  //console output = k1 {v1:'s1'}
});

storage.get('v1',function(result){
  console.log(result);
  //console output = {v1:'s1'}
})
于 2012-07-27T20:02:13.303 回答
24

现在是 2016 年,Chrome(以及 Firefox 和 Edge - 每个使用 Chrome 扩展模型的人)都支持 ES6 Computed Property Names

这样,任务就变得简单了:

var storage = chrome.storage.local;
var v1 = 'k1';

storage.set({
  [v1]: 's1' // Will evaluate v1 as property name
});

storage.get(v1, function(result) {
    console.log(v1, result);
});
于 2016-10-27T14:22:04.260 回答