web-dev-qa-db-ja.com

chrome.storage.localで配列を保存します

chrome拡張機能を書いていますが、配列を保存できません。これを実現するにはJSON文字列化/解析を使用する必要があると読みましたが、使用中にエラーが発生しました。

chrome.storage.local.get(null, function(userKeyIds){
    if(userKeyIds===null){
        userKeyIds = [];
    }
    var userKeyIdsArray = JSON.parse(userKeyIds);
    // Here I have an Uncaught SyntaxError: Unexpected token o
    userKeyIdsArray.Push({keyPairId: keyPairId,HasBeenUploadedYet: false});
    chrome.storage.local.set(JSON.stringify(userKeyIdsArray),function(){
        if(chrome.runtime.lastError){
            console.log("An error occured : "+chrome.runtime.lastError);
        }
        else{
            chrome.storage.local.get(null, function(userKeyIds){
                console.log(userKeyIds)});
        }
    });
});

{keyPairId:keyPairId、HasBeenUploadedYet:false}のようなオブジェクトの配列を格納するにはどうすればよいですか?

16
little-dude

localStorageを新しいChrome Storage API と間違えたと思います。
-localStorageの場合はJSON文字列が必要でした
-オブジェクト/配列を保存できます直接newStorage API

// by passing an object you can define default values e.g.: []
chrome.storage.local.get({userKeyIds: []}, function (result) {
    // the input argument is ALWAYS an object containing the queried keys
    // so we select the key we need
    var userKeyIds = result.userKeyIds;
    userKeyIds.Push({keyPairId: keyPairId, HasBeenUploadedYet: false});
    // set the new array value to the same key
    chrome.storage.local.set({userKeyIds: userKeyIds}, function () {
        // you can use strings instead of objects
        // if you don't  want to define default values
        chrome.storage.local.get('userKeyIds', function (result) {
            console.log(result.userKeyIds)
        });
    });
});
37
gblazex