我有最新版本的 Firefox 和 IE,但是html5rocks.com中的示例在这两个浏览器中不起作用。我用 Chrome 测试过,效果很好。我注意到这些浏览器在尝试打开 indexedDB 时不会触发任何事件(“onsuccess”或“onerror”),如下所示。
var request = indexedDB.open("todos");
请分享此问题的任何想法/解决方案。
我有最新版本的 Firefox 和 IE,但是html5rocks.com中的示例在这两个浏览器中不起作用。我用 Chrome 测试过,效果很好。我注意到这些浏览器在尝试打开 indexedDB 时不会触发任何事件(“onsuccess”或“onerror”),如下所示。
var request = indexedDB.open("todos");
请分享此问题的任何想法/解决方案。
要使 html5rocks 演示在 Firefox 上运行,您需要onupgradeneeded
在数据库打开时附加事件,而不是setversion
创建数据库的方法。这是适用于 Firefox 和 Chrome 的代码示例:
myStorage.indexedDB.open = function() {
var v = 1;
var request = indexedDB.open("todos", v);
//Firefox code for db init
request.onupgradeneeded = function (e) {
myStorage.indexedDB.db = e.target.result;
var db = myStorage.indexedDB.db;
// We can only create Object stores in a setVersion transaction;
if(db.objectStoreNames.contains("todo")) {
var storeReq = db.deleteObjectStore("todo");
}
var store = db.createObjectStore("todo",
{keyPath: "timeStamp"});
}
request.onsuccess = function(e) {
myStorage.indexedDB.db = e.target.result;
var db = myStorage.indexedDB.db;
//Chrome code for db init
if (v!= db.version && db.setVersion) {
var setVrequest = db.setVersion(v);
// onsuccess is the only place we can create Object Stores
setVrequest.onerror = myStorage.indexedDB.onerror;
setVrequest.onsuccess = function(e) {
if(db.objectStoreNames.contains("todo")) {
db.deleteObjectStore("todo");
}
var store = db.createObjectStore("todo",
{keyPath: "timeStamp"});
myStorage.indexedDB.getAllTodoItems();
};
}
else
myStorage.indexedDB.getAllTodoItems();
};
request.onerror = myStorage.indexedDB.onerror;
}
编辑:这是我在github上维护的 html5roks ToDo 演示的工作版本的链接,扩展了两个新功能,用于查看详细信息数据和更新值。
Chrome 落后于 IndexedDB 标准。
12 月推出了新的修订版,Firefox 和 IE 已升级。Chrome 还没有。
我相信运行 HTML5Rocks.com 的主要是 Chrome 团队中的人,所以这些示例会落后是有道理的。
2010 年 12 月前后 API 之间的重大变化是setVersion
请求的变化和新的onupgradeneeded
回调。
IE 不支持 IndexedDB。访问 html5test.com 进行验证
2015 年编辑:IndexedDB API在 IE中可用,版本 10
Todo 列表示例是在 chrome 上实现的过时 IndexedDB 规范。现在您必须使用 onupgardedneeded 方法,并且现在也要使用 setVersion。