Группа разработчиков Internet Explorer и представители более широкого веб-сообщества продолжают вносить улучшения в спецификацию IndexedDB. IndexedDB является рабочим черновиком консорциума W3C, позволяющим хранить, искать и получать данные на устройстве пользователя, даже при отключенном подключении к Интернету. IndexedDB — это компонент общей веб-платформы Internet Explorer 10 и приложений в стиле Metro в операционной системе Windows 8 Consumer Preview.
В этой записи блога описаны изменения, внесенные в Internet Explorer 10 Consumer Preview для реализации новейшей версии данной спецификации консорциума W3C.
Самое значительное изменение касается того, как разработчики обновляют свои схемы баз данных (т. е. хранилища объектов, индексы) при переходе от одной версии к другой. Рабочая группа (включая Майкрософт) решила заменить API-интерфейс IDBDatabase.setVersion новым API IDBFactory.open. В новом API open используется дополнительный параметр, чтобы определить, хотите ли вы использовать текущую версию базы данных или желаете обновить схему базы данных до новой версии. Теперь API open возвращает объект IDBOpenDBRequest, позволяющий зарегистрироваться для события onupgradeneeded. В обработчике событий можно обновить схему используемой базы данных, добавив в нее дополнительные хранилища объектов и индексы.
IDBDatabase.setVersion
IDBFactory.open
open
IDBOpenDBRequest
Чтобы обновить существующий код, добавьте параметр version в свой метод open, заменив в нем вызов метода setVersion, и зарегистрируйте новый обработчик событий onupgradeneeded в IDBOpenDBRequest (см. ниже).
version
setVersion
onupgradeneeded
Пример старого кода — код, затрагиваемый данным изменением, выделен зеленым цветом
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 }
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;
function successHandler(evt) {
//create schema
Пример нового кода — измененный код выделен желтым цветом
function openDBTest(dbName) { var rq = window.msIndexedDB.open(dbName, 1); rq.onsuccess = useDB; rq.onupgradeneeded = successHandler; rq.onerror = failureHandler; } function successHandler(evt) { //create schema }
var rq = window.msIndexedDB.open(dbName, 1);
rq.onsuccess = useDB;
rq.onupgradeneeded = successHandler;
Кроме того, в платформу нами были внесены несколько менее существенных (но все же достаточно важных) изменений:
IDBCursor.advance(count)
count
IDBObjectStore.count(key)
IDBIndex.count(key)
IDBFactory.cmp(first, second)
IDBKeyRanges
IDBObjectStore.count
IDBObjectStore.delete
IDBIndex.count
IDBObjectStore
onsuccess
// 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(); }
// 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) {
Снимок экрана демонстрации Компаньон Facebook с сайта тестового выпуска Internet Explorer
Кроме того, мы отправили рабочей группе консорциума W3C по IndexedDB более 100 тестовых случаев, включая новые тесты и обновления существующих.
В дополнение к обновлениям, обеспечивающим соответствие изменениям в спецификации консорциума W3C, версия Windows 8 Consumer Preview включает улучшения, предоставляющие пользователям возможность управлять тем, как сайты и приложения используют IndexedDB на их устройствах:
Снимки экрана, на которых представлена новая вкладка [Caches and databases] (Кэши и базы данных) диалогового окна [Website Data Settings] (Параметры данных веб-сайтов) и обновленное диалоговое окно "Удаление истории обзора".
Рабочая группа по веб-приложениям консорциума W3C продолжает работу над завершением спецификации IndexedDB, внося важные улучшения и сокращая количество и область охвата вносимых изменений. Это важный этап для веб-разработчиков, которые будут использовать эту технологию в ближайшем будущем, в том числе в Windows 8 и Internet Explorer 10.
С нетерпением ожидаем, когда сможем ознакомиться с результатами использования IndexedDB на ваших сайтах и в приложениях, а также ваших отзывов на поддержку IndexedDB в Internet Explorer 10.
— Израэль Хилерио (Israel Hilerio), д-р наук, старший руководитель программы, Internet Explorer