我试图在新记入的indexedDB上调用createObjectStore并在FireFox中收到此错误:InvalidStateError:尝试对不允许发生突变的数据库执行变异操作。
这是我的代码:
var indexed_db = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;
if (indexed_db) {
var request = indexed_db.open("Map Tiles", 1);
request.onerror = function(event) { };
request.onsuccess = function(event) {
var tile_store = event.target.result.createObjectStore("map", {keyPath: ["zoom_level", "tile_column", "tile_row"]});
};
request.onupgradeneeded = function(event) { };
}
当我调用createObjectStore时发生错误。任何帮助将不胜感激。
答案 0 :(得分:2)
indexedDB基本上有三种类型的事务:readonly,readwrite和versionchange。您可以在作为readwrite类型的事务中向/从对象存储库添加/删除对象。从技术上讲,你也可以在versionchange中添加/删除对象,但这不是我认为的最佳实践。但是,您无法在readwrite / readonly类型事务中创建/删除对象存储或索引(您会收到此错误)。您只能在versionchange事务中执行objectstore / index create / remove。
您可以直接创建readonly和readwrite类型的事务,但不能创建versionchange。 versionchange仅发生在upgradeneeded事件回调中。实际上,您只能在onupgradeneeded回调中进行更改。因此,正如您的评论所说,在版本更改事务之外进行架构更改(添加/删除存储/索引)会触发此错误,这基本上是在onupgradeneeded内提供的特殊类型之外的每个事务。