为什么window.indexedDB评估为undefined? (如何使用IndexedDB?)

时间:2011-12-01 23:12:55

标签: javascript html5 indexeddb

我正在搞乱HTML5的IndexedDB。

以下是来自http://html5-demos.appspot.com/static/html5storage/index.html#slide31的简单代码,在Chrome或Firefox中不适合我,它在Firebug中给我这条消息:

  

未捕获的TypeError:无法调用未定义的方法'open'

代码的第一行,即:

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

有人可以帮我解决这个问题吗?

There is a JSFiddle running the code


我知道这适用于浏览器,因为此交互式幻灯片有效:http://html5-demos.appspot.com/static/html5storage/index.html#slide34

3 个答案:

答案 0 :(得分:6)

您必须为每个浏览器使用前缀版本(window.webkitIndexedDBwindow.mozIndexedDB)。然后你可以做类似的事情:

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

然后在代码中的任何地方使用window.indexedDB

答案 1 :(得分:3)

至于Chrome中的供应商前缀扩展程序,如果您想要使用完整的IndexedDB API,那么它不仅仅是window.indexedDB。我正在MIT licensed IndexedDB wrapper工作。这是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;
    }
}

答案 2 :(得分:1)

略短的版本(基于modernizr的名称):

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