【问题标题】:Using a variable key in chrome.storage.local.set [duplicate]在 chrome.storage.local.set 中使用变量键 [重复]
【发布时间】:2016-10-27 22:43:41
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    在 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);
            }
        });
    

    【讨论】:

    • 很好,但它不看 val 是否已经存在并且多次重复相同的值
    • 可能想要将其更新为 ES6 计算属性名称。
    • 或者,如果您不想更新,请发送电子邮件至 this question
    【解决方案2】:

    我已经解决了这个问题。 而不是使用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"}

    【讨论】:

    猜你喜欢
    • 2012-07-26
    • 2019-04-26
    • 2014-03-16
    • 2020-09-22
    • 2020-08-22
    • 1970-01-01
    • 2019-07-16
    • 2019-05-18
    • 2020-06-08
    相关资源
    最近更新 更多