在chrome.storage.local.set中使用变量键

时间:2013-02-20 14:41:38

标签: javascript google-chrome-extension google-chrome-storage

我正在创建一个chrome扩展程序。 我不知道如何使用变量作为chrome.storage.local.set()函数的关键。我试过了

var key = 'myKey';
chrome.storage.local.get(key, function(val) { 
    chrome.storage.local.set({key:val[key]+param1}); //appending  param1
    alert(val[key]);
}

这里我试图获取val[key]的值并附加一个字符串param1并使用相同的密钥将其放回存储。但我无法这样做。  警报框始终显示未定义。


但是当我尝试没有变量key时,就可以正常使用

chrome.storage.local.get('myKey', function(val) { 
    chrome.storage.local.set({myKey:val['myKey']+param1}); //appending  param1
    alert(val['myKey']);
}

问题是我使用的chrome.storage.local.set不仅可以包含字符串,还可以包含对象。

2 个答案:

答案 0 :(得分:5)

在JavaScript中,使用非静态变量名的唯一方法是将值指定为属性,而不是使用对象文字。

var key = 'myKey';
var param1 = 'whatever';
chrome.storage.local.get(key, function(val) {
    // Create property if does not exist (yet)
    if (typeof val[key] != 'string') val[key] = '';
    // Append value of param1
    val[key] += param1;
    // Save data
    chrome.storage.local.set(val);
    alert(val[key]);
});

注意:您可能需要验证set是否成功。这可以通过使用回调来完成。例如:

    chrome.storage.local.set(val, function() {
        if (chrome.extension.lastError) {
            alert('An error occurred: ' + chrome.extension.lastError.message);
        }
    });

答案 1 :(得分:3)

我已经解决了这个问题。 而不是使用chrome.storage.local.set({key:val[key]+param1});

我已将json字符串{key:val[key]+param1}替换为对象。

var obj = {};       
var key = "myKey";  
obj[key] += param1;   
chrome.storage.local.set(obj);

此处obj的值为{"myKey":"the appended value"}