4

我正在创建一个 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的参数不仅可以是字符串,还可以是对象。

4

2 回答 2

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);
        }
    });
于 2013-02-20T15:23:11.683 回答
4

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

我已经{key:val[key]+param1}用一个对象替换了 json 字符串。

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

这里obj有价值{"myKey":"the appended value"}

于 2013-02-21T13:32:08.023 回答