4

我在 Firefox 和 Chrome 中使用 html5 规范中的 IndexedDB API。

有些东西没有按预期工作,我想在这里分享它,因为我不知道这是我的错还是浏览器错误。

根据API ,当您打开与本地数据库的连接并且使用的版本号大于数据库版本号时,会触发一个名为onversionchange的事件。我的问题是这个事件在 Firefox 中被触发,而不是在 Chrome 中。

一些尝试几种模式的示例代码:

var db;
var DB_VERSION = 5;
var openRequest = indexedDB.open("test_db", DB_VERSION);
openRequest.onsuccess = function(event) {
    db = openRequest.result;
};
openRequest.onversionchange = function(event) {
    console.log("This is the place where I can change db structure");
};
openRequest.onupgradeneeded = function(event) {
    console.log("This is the place where I can change db structure");
};

即使我更改版本号,onversionchage 事件也不会被触发。

UPDATE 正如ebidel所回答的,Chrome 实现不遵循当前规范,因此,为了拥有跨浏览器客户端代码,我们需要处理两种情况:onversionchange事件和database.version手动比较。

以下是一些带有代码示例的链接: Chromium google groupHTML5 Rocks!

4

1 回答 1

5

Chrome 的 IndexedDB 实现基于旧版本的规范,它使用旧setVersion调用而不是onversionchange/ onupgradeneeded。请对此问题加注星标:http: //crbug.com/108223

于 2012-02-22T23:17:51.840 回答