Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么window.indexedDB的计算结果为未定义?(如何使用IndexedDB?)_Javascript_Html_Indexeddb - Fatal编程技术网

Javascript 为什么window.indexedDB的计算结果为未定义?(如何使用IndexedDB?)

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 有人能帮我把这个弄好吗 我知道这在浏览器上是有效的,因为这张交互式幻灯片是有效的:您必须为每个浏览器使用

我在搞HTML5的IndexedDB

下面是一个简单的代码,它在Chrome或Firefox中对我不起作用,它在Firebug中给了我这个信息:

未捕获的TypeError:无法调用未定义的方法“open”`

对于代码的第一行,即:

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;