IndexedDB-Updates für IE10 und Apps im Metro-Stil

IEBlog Deutsch

Blog des Internet Explorer-Entwicklerteams

IndexedDB-Updates für IE10 und Apps im Metro-Stil

  • Comments 0

Das Internet Explorer-Team hat in Zusammenarbeit mit der allgemeinen Web-Community weitere Verbesserungen an der IndexedDB-Spezifikation vorgenommen. IndexedDB ist ein W3C-Arbeitsentwurf, mit dem Sie auch dann Daten auf dem Benutzergerät speichern, suchen und abrufen können, wenn keine Internetverbindung vorhanden ist. IndexedDB ist eine Funktion der Webplattform, die von IE10 und Apps im Metro-Stil in der Windows 8 Consumer Preview geteilt wird.

In diesem Blogbeitrag werden die Änderungen erklärt, die wir an der „Consumer Preview“ von Internet Explorer 10 vorgenommen haben, um die aktuelle Version der W3C-Spezifikation umzusetzen.

Änderungen an der Versionsverwaltung

Die wichtigste Änderung betrifft die Art und Weise, wie Entwickler die Datenbankschemata (d. h. ihre Objektspeicher bzw. Indizes) der alten Version in der nächsten aktualisieren. Die Arbeitsgruppe (inklusive Microsoft) hat beschlossen, die IDBDatabase.setVersion-API durch eine neue IDBFactory.open-API zu ersetzen. Die neue open API verwendet einen zusätzlichen Parameter, um festzustellen, ob Sie die aktuelle Version der Datenbank verwenden oder das Datenbankschema auf eine neuere Version aktualisieren möchten. Die open-API gibt jetzt ein IDBOpenDBRequest-Objekt zurück, das es Ihnen erlaubt, sich für ein „onupgradeneeded“-Ereignis zu registrieren. Im Ereignishandler können Sie Ihr Datenbankschema aktualisieren, indem Sie weitere Objektspeicher und Indizes hinzufügen.

Um den vorhandenen Code zu aktualisieren, fügen Sie Ihrer open-Methode einen version-Parameter hinzu, der den Aufruf an setVersion ersetzt, und registrieren Sie einen neuen onupgradeneeded-Ereignishandler auf dem IDBOpenDBRequest (siehe unten).

Altes Codebeispiel – Grün markiert den betreffenden Code

function openDBTest(dbName) {

var rq = window.msIndexedDB.open(dbName);

rq.onsuccess = successOpenningDB;

rq.onerror = failureHandler;

}

 

function successOpenningDB(evt) {

var db = evt.target.result;

var rq = db.setVersion("1");

rq.onsuccess = successHandler;

rq.onerror = failureHandler;

}

 

function successHandler(evt) {

//create schema

}

Neues Codebeispiel – Gelb markiert den geänderten Code

function openDBTest(dbName) {

var rq = window.msIndexedDB.open(dbName, 1);

rq.onsuccess = useDB;

rq.onupgradeneeded = successHandler;

rq.onerror = failureHandler;

}

 

function successHandler(evt) {

//create schema

}

Weitere Änderungen

Zusätzlich haben wir einige kleinere (aber dennoch wichtige) Änderungen an der Plattform vorgenommen:

  • Die IDBCursor.advance(count)-Methode wurde hinzugefügt. Mittels dieser Methode können Sie Datensätze in einem Cursor überspringen, was wiederum Paginierungsszenarien ermöglicht. Der count-Parameter legt die Anzahl der Datensätze fest, die vor dem Zugriff auf die Daten übersprungen werden sollen. Gültige Werte sind 1 oder größer.
  • Die Methoden IDBObjectStore.count(key) und IDBIndex.count(key) wurden hinzugefügt. Mit diesen können alle Datensätze gezählt werden, die spezifischen Kriterien entsprechen. Wenn kein Schlüsselwert festgelegt ist, wird die Anzahl aller Datensätze innerhalb des Indexes oder des Objektspeichers zurückgegeben.
  • Die IDBFactory.cmp(first, second)-Methode wurde hinzugefügt. Diese Methode vergleicht zwei Schlüsselwerte, um zu bestimmen, ob ein Wert größer ist oder beide gleich sind.
  • IDBKeyRanges arbeiten jetzt mit weiteren Methoden, inklusive IDBObjectStore.count, IDBObjectStore.delete, IDBIndex.count. So können Sie Datensätze abgleichen, die sich über Schlüsselwertgruppen erstrecken.
  • Die Werte, die der Datenbank hinzugefügt werden, müssen nicht mehr allen vorab festgelegten Indizes entsprechen. So können Sie einem IDBObjectStore Datensätze hinzufügen, die nicht den Einschränkungen vorab festgelegter Indizes entsprechen.
  • Wenn im Zusammenhang mit einer aktiven Transaktion eine Ausnahme auftritt, wird die Transaktion abgebrochen. Dies bedeutet, dass wenn innerhalb des onsuccess-Ereignishandlers eine Ausnahme auftritt, die Transaktion abgebrochen wird. Die Datenbanktransaktion kann jedoch normal fortgesetzt werden, wenn die Ausnahme behandelt wird.

    // This won’t abort the transaction because there is no active transaction.

    function createTransaction() {

    var txn = db.transaction("test");

    window.aaaaaa();

    }

     

    // This will abort the transaction because the exception is thrown when there is an active transaction.

    var rq = objectStore.add(record);

    rq.onsuccess = function (event) {

    window.aaaaaa();

    }

  • Den Indexeigenschaften auf einem „Blob“ wurde eine Unterstützungsfunktion hinzugefügt. Diese ermöglicht es, Binärdaten aus dem Internet herunterzuladen, lokal zu speichern und „Blob“-Eigenschaften (wie z. B. Name und Größe) als Indizes oder einzigartige Schlüssel zum „Blob“ zu verwenden. Dank dieser Funktion können Sie z. B. offline Ihre Musikdateien anhören bzw. Bilder oder Videos ansehen und gleichzeitig Ihre Sammlung unter Verwendung des „Blob“-Namens durchsuchen. Unsere aktuelle IE Test Drive-Demo zeigt Ihnen, wie Sie diese Funktion nutzen können, um sich Ihre Facebook-Alben offline anzuschauen..
  • Screenshot der IE Test Drive-Demo „Facebook Companion“
    Screenshot der IE Test Drive-Demo „Facebook Companion“

Außerdem haben wir über 100 Testfälle an die W3C-Arbeitsgruppe für IndexedDB übermittelt, inklusive neuer Tests und Aktualisierungen vorhandener Tests.

Steuern der Verwendung von IndexedDB durch Websites und Apps

Zusätzlich zu den Aktualisierungen zum Anpassen an die Änderungen in der W3C-Spezifikation enthält die Windows 8 Consumer Preview Verbesserungen, die es Benutzern ermöglichen, selbst festzulegen, wie IndexedDB von den Websites und Apps auf Ihren Geräten verwendet werden soll:

  • Ein Handler zum Deinstallieren von Apps im Metro-Stil, die indexedDB verwenden, wurde eingeführt. Dieser Handler stellt sicher, dass beim Entfernen einer Anwendung die entsprechenden Daten in der IndexedDB-Datenbank während des Deinstallationsvorgangs automatisch gelöscht werden.
  • Datenträgerkontingente (Speicherbeschränkungen) wurden implementiert, um zu verhindern, dass Websites zu viel Speicherplatz beanspruchen. IT-Administratoren oder Benutzer mit administrativem Zugang zur Registrierung können die Datenträgerkontingentgrenzen über die Gruppenrichtlinieneinstellungen aktualisieren. Allerdings gelten die Datenträgerkontingente nicht für Apps im Metro-Stil.
  • Eine neue Browser-Benutzeroberfläche für Endbenutzer zur Verwaltung ihrer Datenbanken und Datenträgerkontingente wurde hinzugefügt. Benutzer können einzelne Datenbanken über die Zwischenspeicher und Datenbankdialogfelder entfernen. Sie können auch alle Datenbanken löschen, indem Sie im Dialogfeld [Delete Browsing History] (Browserverlauf löschen) das Kontrollkästchen [Cookies and Website Data] (Cookies und Websitedaten) aktivieren.

Screenshot der neuen Zwischenspeicher und der Datenbankregisterkarte des Dialogfelds [Website Data Settings] (Websitedateneinstellungen). So können Sie steuern, ob Websites Zwischenspeicher und Datenbanken erstellen können, und wie groß diese sein dürfen.Screenshot des aktualisierten Dialogfelds [Delete Browsing History] (Browserverlauf löschen). Zeigt die neue Formulierung der Cookiesoption, um Websitedaten, insbesondere von Websites erstellte Datenbanken, einzuschließen.
Screenshots der neuen Registerkarte für Zwischenspeicher und Datenbanken im Dialogfeld [Website Data Settings] (Websitedateneinstellungen) und des aktualisierten Dialogfelds [Delete Browsing History] (Browserverlauf löschen).

Blick in die Zukunft

Die W3C WebApp-Arbeitsgruppe arbeitet weiterhin an der Fertigstellung von IndexedDB, indem sie wichtige Verbesserungen vornimmt und Anzahl und Umfang der Änderungen an der Spezifikation verringert. Dies ist ein wichtiger Schritt für Webentwickler, die in naher Zukunft auch unter Windows 8 und IE10 mit dieser Technologie arbeiten werden.

Wir sind gespannt, wie Sie IndexedDB für Ihre Websites und Apps verwenden werden, und wir freuen uns auf Ihr Feedback über IndexedDB in IE10.

– Israel Hilerio, Ph.D., Principal Program Manager, Internet Explorer