这个问题已经在这里有一个答案:
- chrome.storage.local.set使用可变密钥的名字 2个回答
我创建一个铬扩展。 我不知道如何使用一个变量为重点,以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
,并把它重新使用相同的密钥存储。 但我不能这样做。 警告框显示undefined所有的时间。
但是,当我尝试没有变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
可以不仅字符串的论点,但也是对象。
在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);
}
});
我已经解决了这个问题。 代替使用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"}