11

Ich schreibe eine Chrome-Erweiterung, und ich kann ein Array nicht speichern. Ich habe gelesen, dass ich JSON stringify/parse verwenden sollte, um dies zu erreichen, aber ich habe einen Fehler bei der Verwendung.Speichern Sie ein Array mit chrome.storage.local

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

Wie könnte ich ein Array von Objekten speichern wie {keyPairId: keyPairId, HasBeenUploadedYet: false}?

+1

Es gibt keine Notwendigkeit, es zu stringify/analysieren. Sie können Arrays direkt speichern. – BeardFist

+0

@BeardFist Ich habe Uncaught TypeError: Objekt # hat keine Methode 'Push' für den folgenden Code, deshalb dachte ich, ich sollte mein Array string. 'chrome.storage.local.get (null, function (userKeysIds) { if (userKeysIds === null) { userKeysIds = new Array(); } userKeysIds.push ({keyPairId: keyPairId, HasBeenUploadedYet: false}); // ERROR chrome.storage.local.set (userKeysIds, function() { } }; }); ' –

+0

Sie bekommen und setzen Sachen mit' Schlüssel' und wenn Sie es bekommen, es ist ein Objekt wie 'chrome.storage.local.get ('userKeyIds', function (stuff)) {console.log (stuff.userKeyIds);});' – BeardFist

Antwort

27

Ich glaube, Sie haben localStorage für das neue Chrome Storage API verwechselt.
- Sie benötigt JSON-Strings bei der localStorage
- Sie können speichern Objekte/Arrays direkt mit dem neuenStorage 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) 
     }); 
    }); 
}); 
+3

Das funktioniert perfekt, vielen Dank! Und netter Tipp für Standardwerte :) –

+1

Kein Problem, froh, dass ich helfen konnte. – galambalazs

+0

Wie kommt es, dass Daten am Ende mit 'userKeyIds' abgerufen werden, was eine Zeichenkette ist, wenn wir den Schlüssel als userKeyIds-Objekt setzen? Code scheint gut zu funktionieren. – mik