我正在创建一个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
不仅可以包含字符串,还可以包含对象。
答案 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"}