【问题标题】:IndexedDB error in FireFox when calling createObjectStore调用 createObjectStore 时 FireFox 中的 IndexedDB 错误
【发布时间】:2014-06-18 21:50:54
【问题描述】:

我正在尝试在新添加的 indexedDB 上调用 createObjectStore,并在 FireFox 中收到此错误:InvalidStateError: A mutation operation was mapped on a database that didn't allow mutation。

这是我的代码:

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 时发生错误。任何帮助将不胜感激。

【问题讨论】:

  • 貌似createObjectStore只能在onupgradeneeded函数中创建。一旦我将代码移到那里,它就会停止抛出错误。

标签: firefox indexeddb


【解决方案1】:

indexedDB 基本上有三种类型的事务:readonly、readwrite 和 versionchange。您可以在读写类型的事务中向对象存储添加/删除对象。从技术上讲,您还可以在 versionchange 中添加/删除对象,但这不是我认为的最佳实践。但是,您不能在读写/只读类型事务中创建/删除对象存储或索引(您会收到此错误)。您只能在版本更改事务中执行对象存储/索引创建/删除。

可以直接创建readonly和readwrite类型的事务,但不能创建versionchange。 versionchange 仅在 upgradeneeded 事件回调中发生。实际上,您只能在 onupgradeneeded 回调中进行更改。因此,正如您的评论所说,在 versionchange 事务之外进行架构更改(添加/删除存储/索引)会触发此错误,这基本上是 onupgradeneeded 中提供的特殊类型事务之外的每个事务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多