11

Piszę rozszerzenie chrome i nie mogę przechowywać tablicy. Czytałem, że powinienem użyć stringify/parsowania JSON, aby to osiągnąć, ale mam błąd z jego użyciem.Przechowywać tablicę z 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)}); 
     } 
    }); 
}); 

Jak mogę zapisać tablicę obiektów, takich jak {keyPairId: keyPairId, HasBeenUploadedYet: false}?

+1

Nie ma potrzeby, aby stringify/analizować je. Możesz przechowywać tablice bezpośrednio. – BeardFist

+0

@BeardFist Mam Uncaught TypeError: Object # nie ma metody "push" dla następującego kodu, dlatego myślałem, że powinienem stringify mojej tablicy. 'chrome.storage.local.get (null funkcyjne (userKeysIds ) {if (userKeysIds === null) { userKeysIds = new Array(); } userKeysIds.push ({keyPairId: keyPairId, HasBeenUploadedYet: false}); // BŁĄD chrome.storage.local.set (userKeysIds, function() { } }); }); ' –

+0

Dostajesz i ustawiasz rzeczy używając' keys' i kiedy je otrzymujesz, jest obiektem takim jak 'chrome.storage.local.get ('userKeyIds', function (stuff) {console.log (stuff.userKeyIds);});' – BeardFist

Odpowiedz

27

Myślę, że pomyliłeś się z localStorage dla nowego Chrome Storage API.
- Potrzebowałeś ciągi JSON w przypadku localStorage
- Można przechowywać obiekty/tablice bezpośrednio z nowegoStorage 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

To działa doskonale, wielkie dzięki! I miła wskazówka dla domyślnych wartości :) –

+1

Nie ma problemu, cieszę się, że mogłem pomóc. – galambalazs

+0

W jaki sposób dane są wyprowadzane z "userKeyIds" na końcu, który jest łańcuchem, kiedy ustawiamy klucz jako obiekt userKeyIds? Kod wydaje się działać dobrze. – mik

Powiązane problemy