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

json文字列{key:val[key]+param1}をオブジェクトに置き換えました。

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

ここobjに価値があります{"myKey":"the appended value"}

于 2013-02-21T13:32:08.023 に答える