我正在搞乱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
答案 0 :(得分:6)
您必须为每个浏览器使用前缀版本(window.webkitIndexedDB
或window.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;