2

我在搞乱 HTML5 的 IndexedDB。

下面是来自http://html5-demos.appspot.com/static/html5storage/index.html#slide31的一个简单代码 ,它在 Chrome 或 Firefox 中对我不起作用,它在 Firebug 中给了我这个消息:

未捕获的类型错误:无法调用未定义的方法“打开”

对于代码的第一行,即:

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

有人可以帮我完成这项工作吗?

有一个运行代码的 JSFiddle


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

4

3 回答 3

6

您必须为每个浏览器(window.webkitIndexedDBwindow.mozIndexedDB)使用前缀版本。然后您可以执行以下操作:

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

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

于 2011-12-02T04:22:08.240 回答
3

就 Chrome 中的供应商前缀扩展而言,如果您想使用完整的 IndexedDB API,那么它不仅仅是window.indexedDB. 我正在研究MIT 许可的 IndexedDB 包装器。这是其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;
    }
}
于 2011-12-02T05:15:36.967 回答
1

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

var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.moz_indexedDB;
于 2011-12-02T15:34:38.900 回答