【问题标题】:chrome.storage.local.set using a variable key namechrome.storage.local.set 使用变量键名
【发布时间】:2012-07-26 10:06:13
【问题描述】:

在 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'}
});

【问题讨论】:

  • 如果这有帮助... storage.set = function () { var schema = this.parameters[functionName]; chromeHidden.validate(参数,架构); return sendRequest('storage.' + functionName, [namespace].concat(Array.prototype.slice.call(arguments)), extendSchema(schema)); }
  • @Pacerier 我想知道花时间编辑问题和 2 个答案只是为了重构 1 个变量名的原因。

标签: javascript google-chrome-extension


【解决方案1】:

这就是你要找的东西吗?

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'}
})

【讨论】:

    【解决方案2】:

    现在是 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);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      相关资源
      最近更新 更多