1

Ich schreibe eine App, die anfängt, einige leere Startdaten für ein Diagramm in den chrome.storage zu instanziieren, da die Erweiterung verwendet wird, werden die Daten aktualisiert.Erläuterung zu lokalem Speicher der Erweiterung von Chrome

Die Art und Weise, wie ich den Code jetzt formatiere, ist, dass der Speicher beim Starten des Codes instanziiert wird. Dies ist ein Problem, da der Code beim Neustart von Chrome neu gestartet wird und alle geschriebenen Daten überschrieben werden.

So Ich denke, ich brauche in einer Art Prüffunktion zu schreiben, wo ich so etwas wie

chrome.storage.sync.get("data", function (result){ 
    if ("data" !== null){ 
     initStorage(); 
    } else { 
     //do stuff 
    } 
}) 

Ist dies der richtige Weg über die Festsetzung dieses Problem zu gehen schreiben kann? Ich frage mich, ob das funktioniert, wie der Speicher funktioniert? Verfügt jede Erweiterung über einen eigenen Speicherbereich, so dass dort nichts vorhanden ist, wenn ich noch nichts gespeichert habe?

Antwort

1

Da Sie mehrere Werte aus dem Speicher abrufen können, ist result ein Objekt mit den angeforderten Schlüsseln. Überprüfen Sie, ob „Daten“ existiert in diesem Objekt:

chrome.storage.sync.get("data", function(result) { 
    if (!("data" in result)) { 
     initStorage(); 
    } 
    // Do stuff 
}); 
+0

, wenn ich nur einen Schlüssel gespeichert haben Daten in die Speicherung von meiner Erweiterung genannt, tut Daraus folgt, dass, wenn ich nichts gespart hätte, nichts da wäre? Ich bin mir nicht ganz sicher, wie der Speicher funktioniert. Gibt es nur einen großen Eimer für alles, was den Speicher benutzt, oder hat jedes Ding seinen eigenen separaten Bereich, um Schlüssel zu speichern? –

+1

@Jessie Storage ist ein großer Bucket, den Sie abfragen. Wenn Sie nach "data" fragen, wird es nur "result.data" sein (wenn es existiert, oder sonst leer). Wenn Sie nach '[" data "," somthing "]' fragen, erhalten Sie ein Objekt mit höchstens 2 Schlüsseln. Wenn Sie nach 'null' fragen, wird der gesamte Bucket gelöscht. – Xan

2

Beachten Sie, dass die Standardwerte in get bieten kann:

var default_data = { /* something */ }; 
chrome.storage.sync.get({data: default_data}, function(result) { 
    // If "data" wasn't present in storage, result.data is a copy of default_data 
    // Otherwise, result.data is a copy of the actual stored value 
    chrome.storage.sync.set(result); // To save the default, if not saved 
}); 
+0

also das Äquivalent zu überprüfen, ob Daten vorhanden sind, dann die Standarddaten schreiben, wenn nicht und bestehende Daten abrufen, wenn es da ist? –

+0

Ja. Wenn die Daten hier waren und Sie 'result' nicht geändert haben, ändert' set' nichts. Wenn es nicht dort war, erhalten Sie den Standard und 'set' wird es in den Speicher schreiben. Ich würde diesen Code irgendwo wie 'runtime.onStartup' setzen. – Xan

+0

wirklich hilfreicher Tipp –

Verwandte Themen