如何使用变量的值作为键名在 chrome 扩展中使用 chrome.storage?

Posted

技术标签:

【中文标题】如何使用变量的值作为键名在 chrome 扩展中使用 chrome.storage?【英文标题】:How to use chrome.storage in a chrome extension using a variable's value as the key name? 【发布时间】:2012-10-07 04:57:15 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

您好,感谢您提供此信息。它使它更容易理解。在您的帮助下,我想出了一些似乎可以满足我需要的东西!有关示例,请参见上面的问题。 顺便说一句...是否可以在一个命令中使用您的答案中的三行代码,而无需功能部分? 您可以将它包装在像setlocalData(keyNameString, value, callback) 这样的函数中,它使用我发布的三行版本。除此之外,不是,我不这么认为。 @rich 对象文字只能有文字属性名称。在这里,我们需要一个可变 命名的属性。假设您想要一个名为bazzle 的字面名称属性;您可以使用bazzle:5o = ; o["bazzle"] = 5;。但是,如果你不知道你想要的属性的名称(即它存储在一个变量中),你只能做第二种情况o[stringWithPropertyName] = 5;。对象字面量无法使用变量作为属性名。即,stringWithPropertyName:5 将使用冒号左侧的文字字符串。 @onegrx 该函数是一个回调,在存储操作完成后运行。【参考方案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""
)

【讨论】:

以上是关于如何使用变量的值作为键名在 chrome 扩展中使用 chrome.storage?的主要内容,如果未能解决你的问题,请参考以下文章

Saxon-HE Java 扩展 - 如何访问作为参数传递的 xsl 变量的值?

如何从 background.js 访问变量以在 chrome 扩展中弹出

php中数组可以使用哪些键名

如何从 BigQuery 中的 Array(Struct) 类型数据结构中获取每个键名的值

如何使用 WebStorm 进行 Chrome 扩展开发?

extract — 从数组中将变量导入到当前的符号表