18

我正在尝试将 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]);
    });
4

2 回答 2

32

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

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

这不是最优雅的代码,但它是唯一的方法。

在 ES6 中,稍微短一点的方法是使用带有动态属性名称的对象字面量:

chrome.storage.local.set({
    [imageName]: myDescription
}, function() { /*...*/ });
于 2012-10-17T02:21:24.883 回答
1

set方法接受对象 items和一个可选的回调,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"}"
})
于 2017-12-14T13:13:39.423 回答