Почему window.indexedDB оценивается как неопределенный? (Как использовать IndexedDB?) - PullRequest
2 голосов
/ 02 декабря 2011

Я возился с IndexedDB в HTML5.

Ниже приведен простой код из http://html5 -demos.appspot.com / static / html5storage / index.html # slide31 , который не работает для меня в Chrome или Firefox, он дает мне это сообщение в Firebug:

Uncaught TypeError: Невозможно вызвать метод 'open' из неопределенного`

для 1-й строки кода:

var db = window.indexedDB.open('FriendDB', 'My Friends!');  // exception here

Может кто-нибудь помочь мне заставить это работать, пожалуйста?

JSFiddle запускает код


Я знаю, что это работает в браузере, потому что этот интерактивный слайд работает: http://html5 -demos.appspot.com / static / html5storage / index.html # slide34

Ответы [ 3 ]

6 голосов
/ 02 декабря 2011

Вы должны использовать префиксную версию для каждого браузера (window.webkitIndexedDB или window.mozIndexedDB). Тогда вы можете сделать что-то вроде:

window.indexedDB = window.indexedDB
                     || window.webkitIndexedDB
                     || window.mozIndexedDB;

и затем используйте window.indexedDB везде в вашем коде.

3 голосов
/ 02 декабря 2011

Что касается расширений с префиксом поставщика в Chrome, если вы хотите использовать полный API IndexedDB, это больше, чем просто window.indexedDB.Я работаю над лицензированной оболочкой IndexedDB *1003*, зарегистрированной в MIT.Вот упрощенная версия его метода fixBrowser() на случай, если он может помочь.Следует стандартизировать интерфейс через Chrome и FF.

InDB.fixBrowser = function () {
    if ( 'webkitIndexedDB' in window ) {
        window.IDBCursor = window.webkitIDBCursor;
        window.IDBDatabase = window.webkitIDBDatabase;
        window.IDBDatabaseError = window.webkitIDBDatabaseError;
        window.IDBDatabaseException = window.webkitIDBDatabaseException;
        window.IDBErrorEvent = window.webkitIDBErrorEvent;
        window.IDBEvent = window.webkitIDBEvent;
        window.IDBFactory = window.webkitIDBFactory;
        window.IDBIndex = window.webkitIDBIndex;
        window.IDBKeyRange = window.webkitIDBKeyRange;
        window.IDBObjectStore = window.webkitIDBObjectStore;
        window.IDBRequest = window.webkitIDBRequest;
        window.IDBSuccessEvent = window.webkitIDBSuccessEvent;
        window.IDBTransaction = window.webkitIDBTransaction;
        window.indexedDB = window.webkitIndexedDB;
    } else if ( 'mozIndexedDB' in window ) {
        window.indexedDB = window.mozIndexedDB;
    }
}
1 голос
/ 02 декабря 2011

Немного более короткая версия (на основе имен из modernizr ):

var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.moz_indexedDB;
...