2012-05-28 14 views
7

Ich arbeite an einer Chrome-Erweiterung, die einige Informationen (hauptsächlich Registerkarteninformationen) speichern muss, die während der gesamten Lebensdauer der Erweiterung vorhanden sind (z. B. wenn der Benutzer sie verwendet, bis er den Browser schließt).Chrome Extension Daten speichern

Eine Option ist die Verwendung von localstorage, aber localstorage kann nur Strings speichern und das macht es sehr unangenehm für mich (da ich eine Menge Daten speichern muss - Daten, URLs, Ganzzahlen usw.). Nach was ich suche, benutze meine eigenen Javascript-Objekte, die während der Zeit der Erweiterung leben werden.
Jetzt ist das Problem, dass das Definieren dieser Objekte in einem Skript in einigen Javascript-Dateien sie jedes Mal löscht, wenn der Benutzer auf die Browseraktion klickt. Mit anderen Worten, ich habe eine Browser-Aktion namens popup.html, die eine Javascript-Datei enthält (in der ich meine Objekte speichern möchte) und jedes Mal, wenn der Benutzer auf die Browser-Aktion klickt, sind alle in der JS-Datei definierten Objekte verloren Ich möchte, dass alles bestehen bleibt.

Welche Option muss ich beibehalten, um Daten zu erhalten, die durch viele Klicks auf die Browseraktion bestehen und die NICHT lokal gespeichert sind?

+1

Wollen Sie also Daten für die aktuelle Sitzung speichern (bis der Browser geschlossen ist)? In diesem Fall erstellen Sie einfach die Objekte auf der [Hintergrundseite] (https://code.google.com/chrome/extensions/background_pages.html). –

+0

oder Sie können [indexedDB] verwenden (https://developer.mozilla.org/en/IndexedDB/Using_IndexedDB) – gengkev

+0

In diesen Tagen können Sie chrome.storage verwenden, das automatisch FWIW serialisiert/deserialisiert: http://stackoverflow.com/ a/24281357/32453 – rogerdpack

Antwort

2

Sie sollten wirklich localStorage verwenden (Sie können JSON.stringify und JSON.parse verwenden).

Wenn Sie wirklich wollen nicht noch local eine serverseitige Speicherung verwenden, benutzen Sie IndexedDB: https://developer.mozilla.org/en/IndexedDB/Using_IndexedDB

+0

Ich werde auf localStorage zurückgreifen, wenn es keine andere Option gibt. Weißt du, ob eine Hintergrundseite benutzt werden kann, um mein Problem zu lösen? Ich kann nicht vollständig verstehen, was sie aus den Handbüchern tun ... –

+0

Sie können eine Hintergrundseite verwenden, aber es wird wahrscheinlich nicht benötigt. Jedes Skript Ihrer Erweiterung kann von/zu localStorage lesen und schreiben. –

2

Versuchen Sie, die Filesystem API ‚s persistenten Speicher verwenden. Das ist zuverlässiger als localStorage. localStorage wird gelöscht, sobald der Benutzer den Cache, Cookies usw. gelöscht hat. Dateisystem ist zuverlässiger.

+2

Warum ist es eine gute Idee, Daten zu speichern, obwohl der Benutzer Cookies usw. explizit löscht? Würden Sie als Benutzer dieses Verhalten wollen? Das ist besonders seltsam, da @Joel_Blum nach etwas fragt, das nur während der Sitzung des Benutzers bestehen bleibt. – steinar

+0

Leider scheint die FileSystem API nicht von anderen Browsern als Chrome übernommen zu werden und wurde von LocalStorage "ersetzt" – rogerdpack

0

Diese Antwort über die Verwendung von chrome.storage funktionierte für mich weit besser als die anderen.

https://stackoverflow.com/a/14009240/766115

Es ist wie local, funktioniert aber zwischen dem Popup/Hintergrund und Inhalt von Skripten.

Verwandte Themen