2013-03-05 20 views
9

Używam IndexedDB w aplikacji Windows 8 i jestem bardzo nowy dla obu. Udało mi się tworzyć, odczytywać, aktualizować, usuwać obiekty z magazynów obiektów i tworzyć kilka baz danych i kilka magazynów obiektów. Moje pytanie brzmi: jak mogę wyświetlić wszystkie moje magazyny obiektów i bazy danych? Tworzę kilka fałszywych, które nie są potrzebne i chciałbym trochę posprzątać, ale nie pamiętam, jak się nazywają. Być może jest to retencja analna, ale wydaje się, że powinno być możliwe wylistowanie wszystkich baz danych i sklepów. Dzięki!IndexedDB wyświetlanie wszystkich baz danych i magazynów obiektów

Odpowiedz

11

obecnie nie ma sposobu wyliczania istniejących baz danych w standard. Aplikacje Windows 8 używają IE, który nie zapewnia niestandardowej metody webkitGetDatabaseNames. Możesz wyczyścić bazy danych za pomocą options dialog in IE10.

Lista magazynów w bazie danych jest zdefiniowana w standardzie za pomocą metody objectStoreNames instancji IDBDatabase.

+1

Prawidłowe i myślę, że będzie niebezpieczne, aby mieć metodę getDatabaseNames. W ten sposób hakerzy będą mogli łatwo wyszukiwać istniejące bazy danych na klientach. –

+1

@KristofDegrave nie, to nie jest problem, ponieważ nie można uzyskać dostępu z domeny do indeksowanej bazy danych. – user1133275

+1

@ user1133275 Polityka tego samego pochodzenia niekoniecznie chroni Cię przed atakiem, który może uzyskać do niego dostęp przez XSS. Jeśli wstrzykną skrypt na twoją stronę przez coś takiego jak iniekcja SQL, ich skrypt uruchomi się lokalnie na stronie i będzie mógł uzyskać do niego dostęp, a następnie wysłać te informacje gdzie indziej. –

17

W Chrome WebKit istnieje funkcja, która zwraca wszystkie nazwy bazy danych, funkcja ta nie jest już dostępny w Chrome 60 (webkitgetdatabasenames):

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

I nie ma innej funkcji, która lista wszystkich sklepów obiektów w jedna baza danych, która działa we wszystkich przeglądarkach:

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

[ 'webkitGetDatabaseNames()' jest przestarzałe w Chrome 60] (https://developers.google.com/web/updates/2017/06/chrome-60-deprecations#remove_indexeddbwebkitgetdatabasenames) –