Javascript 为什么window.indexedDB的计算结果为未定义?(如何使用IndexedDB?)
我在搞HTML5的IndexedDB 下面是一个简单的代码,它在Chrome或Firefox中对我不起作用,它在Firebug中给了我这个信息: 未捕获的TypeError:无法调用未定义的方法“open”` 对于代码的第一行,即:Javascript 为什么window.indexedDB的计算结果为未定义?(如何使用IndexedDB?),javascript,html,indexeddb,Javascript,Html,Indexeddb,我在搞HTML5的IndexedDB 下面是一个简单的代码,它在Chrome或Firefox中对我不起作用,它在Firebug中给了我这个信息: 未捕获的TypeError:无法调用未定义的方法“open”` 对于代码的第一行,即: var db = window.indexedDB.open('FriendDB', 'My Friends!'); // exception here 有人能帮我把这个弄好吗 我知道这在浏览器上是有效的,因为这张交互式幻灯片是有效的:您必须为每个浏览器使用
var db = window.indexedDB.open('FriendDB', 'My Friends!'); // exception here
有人能帮我把这个弄好吗
我知道这在浏览器上是有效的,因为这张交互式幻灯片是有效的:您必须为每个浏览器使用前缀版本(
window.webkitinexeddb
或window.mozIndexedDB
)。然后,您可以执行以下操作:
window.indexedDB = window.indexedDB
|| window.webkitIndexedDB
|| window.mozIndexedDB;
然后在代码中的任何地方使用
window.indexedDB
。就Chrome中的供应商前缀扩展而言,如果您想使用完整的indexedDB API,它不仅仅是window.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;
}
}
略短的版本(基于以下来源的名称):
window.indexedDB
当时未定义。查找演示所针对的浏览器/环境(最近的Webkit?Safari?)。不要期望它在其他地方工作:)@pst我在上面添加了一个JSFIDLE页面。我运行的是Firefox 8.0.1
和Chrome 15.0.874.121 m
,IndexedDB
在这两种浏览器中都能正常工作,只是没有上面的代码,我想知道是否必须以某种方式启用它。我不能让openDatabase或indexedDB工作,根据@pst,我不这么认为。在这个页面上有一个演示,你可以从数据库中添加和删除项目,它在我的浏览器中都可以使用,但与页面相关的其他功能有限。打开SO:窗口上的FF Web控制台。indexedDB
计算结果为未定义
。打开链接幻灯片上的FF Web控制台:窗口。indexedDB
计算结果为[object IDBFactory]
。天哪。他们不可能使用window.webkit | moz | foo.which:(谢谢你的帖子,我看了你的项目。我希望他们能坚持使用WebSQL而不是IndexedDB。它看起来更复杂。Modernizer不是为你做这件事吗?或者它只处理IndexedDB对象本身吗?我听说是ya jasondavis。我参与这个项目的原因是因为它的复杂性。我正在重写Index的三个部分。)基于xedDB的应用程序。在第一轮中,我发现自己一遍又一遍地编写相同的底层代码——事务、游标等。因此,我在核心内容上创建了一个精简的API。第二轮中,我发现自己在核心内容上编写了相同的方便方法,因此我将底层管道私有化,并公开了一个新的、更简单的API简化API。希望它能保持IndexedDB的风格,而不会吓跑像你这样的开发人员。
var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.moz_indexedDB;