如何使用chrome.storage使用一个变量的值作为键名一款Chrome扩展程序?(How to

2019-08-01 13:22发布

我试图使用Chrome的本地存储/同步存储(chrome.storage)的一个扩展,存储数据项,对许多不同的条目。 我似乎无法找出正确的语法它。 我只想简单地存储信息的字符串。 我已经搜查,还不能找到任何工作。

这是我在使用常规技术的localStorage的时刻是什么在起作用:

    var imageName = "Red Cat 5";
    var myDescription = "A nice kitty";

    localStorage.setItem (imageName, myDescription);
    console.log(localStorage[imageName]);

这工作,让我设置从现有变量的关键。 我能如何使用chrome.storage.local.set呢? 我一直想这个没有任何成功:

    var imageName = "Red Cat 5";
    var myDescription = "A nice kitty";

    chrome.storage.local.set({imageName: myDescription}, function()
    {console.log('success?');});

    chrome.storage.local.set({imageName: myDescription}, function()
    {chrome.storage.local.get(imageName, function(r){console.log(r.imageName);});});

任何帮助深表感谢。 谢谢!

-----更新下-----

感谢您与代码的解释。 我希望它可以帮助别人。 人们似乎对这样的资料很少! 你的回答帮我想出了这一点:

    var nameOne = "al";
    var nameTwo = "bob";
    var nameThree = "carl";
    var nameFour = "dan";

    var dataObj = {};

    dataObj[nameOne] = nameTwo;
    dataObj[nameThree] = nameFour;

    storage.set(dataObj);

    storage.get(dataObj, function(result)
    {
    console.log(result[nameOne]);
    console.log(result[nameThree]);
    });

Answer 1:

使用命名对象,而不是一个匿名对象,并用方括号设置一个成员变量:

var dataObj = {};
dataObj[imageName] = myDescription;
chrome.storage.local.set(dataObj, function() { /*...*/ });

这不是最优雅的看代码,但它是这样做的唯一途径。

在ES6,略短的方法是使用对象文本与动态属性名称:

chrome.storage.local.set({
    [imageName]: myDescription
}, function() { /*...*/ });


Answer 2:

set方法接受对象的项目 ,以及一个可选的回调中, get接受可选的字符串或数组或对象键 ,如果你传递的第一个参数,你必须通过第二个参数为好。

例:

// To set 
chrome.storage.local.set({'testKey':'Test Value'});

// To get
chrome.storage.local.get('testKey', function(data){
  console.log(data); 
  // logs out "Object {testKey: "Test Value"}"
})


文章来源: How to use chrome.storage in a chrome extension using a variable's value as the key name?