0

次のコードを使用して、値を読み込んで chrome.storage に保存します。

$(document).ready(function() 
{
    $( "#filterPlus" ).click(function() 
    {
        SaveSwitch("plus1","#filterPlus","plus1");
    });
}
function SaveSwitch(propertyName, imageId, imageSrc) 
{
    chrome.storage.sync.get(propertyName, function (result) {
        var oldValue = result.propertyName;
        alert('GET:old='+oldValue);  
        if (oldValue==null) 
        {
            oldValue=false;
        }
        var newValue=!oldValue;

        chrome.storage.sync.set({propertyName: newValue}, function() 
        {
            alert('SET:'+newValue);

        });

    });  
}

このメソッドを実行すると、最初のアラートは次のように表示されGET:old=undefinedます: 、2 番目のアラートは次SET:trueのように表示されます: 期待どおりです。しかし、同じパラメーターを使用してそのメソッドを再度呼び出すと、最初のアラート AGAIN が、期待したものではGET:old=undefinedなく表示GET:old=trueされます。

storage.sync の代わりに storage.local を使用した場合と同じ動作です。

「ストレージ」はマニフェストのアクセス許可にあります。JS は、私の拡張機能のオプション ページから呼び出されます。

4

1 に答える 1

2

あなたはやっていて.get("plus1", ...)、後でやってい.set({"propertyName": newValue}, ...)ます。キー " "の下に保存していますが、設定されていないpropertyNameキー " " を取得してplus1います。

おそらくあなたの誤解は、オブジェクト リテラルのキーは、変数識別子ではなく、それ自体が (引用符で囲まれていない場合でも) リテラルであるということです。その場合、変数の値をキー名として使用するクロム拡張機能で chrome.storage を使用する方法を読むフォームの利点がありますか? .

于 2013-12-02T21:13:29.320 に答える