2013-03-05 6 views
9

Ich benutze IndexedDB in einer Windows 8 App und ich bin sehr neu in beiden. Ich konnte erfolgreich Objekte aus Objektspeichern erstellen, lesen, aktualisieren, löschen und habe einige Datenbanken und einige Objektspeicher erstellt. Meine Frage ist, wie kann ich alle meine Objektspeicher und Datenbanken auflisten? Ich erstelle ein paar falsche, die nicht benötigt werden, und ich möchte die Dinge ein wenig aufräumen, aber ich kann mich nicht erinnern, wie sie benannt sind. Vielleicht ist das analen Remanenz, aber es scheint, als ob es möglich sein sollte, alle Datenbanken und Geschäfte aufzulisten. Vielen Dank!IndexedDB Alle Datenbanken und Objekt Stores anzeigen

Antwort

11

Es gibt derzeit keine Möglichkeit, die bestehenden Datenbanken im standard aufzuzählen. Windows 8-Apps verwenden den IE, der die nicht standardmäßige webkitGetDatabaseNames-Methode nicht bereitstellt. Möglicherweise können Sie die Datenbanken mit der options dialog in IE10 löschen.

Die Auflistung der Speicher in einer Datenbank wird im Standard unter Verwendung der objectStoreNames-Methode einer IDBDatabase Instanz definiert.

+1

Richtig, und ich denke, es würde gefährlich, eine getDatabaseNames-Methode zu haben. Auf diese Weise hätten Hacker die Möglichkeit, einfach nach auf den Clients vorhandenen dbs zu suchen. –

+1

@KristofDegrave Nein, das ist kein Problem, weil Sie keinen domainübergreifenden Zugriff auf eine indexedDB durchführen können. – user1133275

+1

@ user1133275 Die Richtlinie für denselben Ursprung schützt Sie nicht unbedingt vor einem Angreifer, der über XSS darauf zugreifen kann. Wenn sie ein Skript über eine SQL-Injektion in Ihre Seite einfügen, wird ihr Skript lokal auf der Seite ausgeführt und kann darauf zugreifen und diese Informationen an anderer Stelle senden. –

17

In Chrome WebKit es eine Funktion war, die alle Datenbanknamen zurückkehren würde, ist diese Funktion nicht mehr zur Verfügung als von Chrome 60 (webkitgetdatabasenames):

indexedDB.webkitGetDatabaseNames().onsuccess = function(sender,args) 
{ console.log(sender.target.result); }; 

Und es ist eine weitere Funktion, die alle Objekt speichert Liste in eine einzige Datenbank, die in allen Browsern:

indexedDB.open(databaseName).onsuccess = function(sender, args) 
{ console.log(sender.target.result.objectStoreNames); }; 
+1

['webkitGetDatabaseNames()' ist in Chrom 60 veraltet] (https://developers.google.com/web/updates/2017/06/chrome-60-deprecations#remove_indexeddbwebkitgetdatabasernames) –

Verwandte Themen