【发布时间】:2015-06-02 10:09:32
【问题描述】:
有没有其他人发现在 Chrome 中创建的 IndexedDB 存储在 Firefox 中不可见,反之亦然?
我在每个浏览器的 google.com 上创建了一些,但我只能从创建它的浏览器中看到那些。这告诉我 IndexedDB 还没有准备好迎接黄金时段
【问题讨论】:
标签: indexeddb
有没有其他人发现在 Chrome 中创建的 IndexedDB 存储在 Firefox 中不可见,反之亦然?
我在每个浏览器的 google.com 上创建了一些,但我只能从创建它的浏览器中看到那些。这告诉我 IndexedDB 还没有准备好迎接黄金时段
【问题讨论】:
标签: indexeddb
有没有其他人发现在 Chrome 中创建的 IndexedDB 存储在 Firefox 中不可见,反之亦然?
是的。
您寻求的行为不是 IndexedDB 的设计目的。
【讨论】:
当您再次运行相同的 URL(在新选项卡或不同的浏览器中)时,浏览器将查看 IndexedDB 是否已经存在,如果存在,则检查新请求的版本和现有的IndexedDB 是否相同。
没有现有的 IndexedDB:
如果 IndexedDB 已经不存在,那么它将创建一个新的。现在在您的情况下,由于您在不同的浏览器中运行它,因此第一次 IndexedDB 将不存在,因此将创建一个新的。 *当打开新数据库时,onupgradeneeded 被触发,这是创建新模式的地方。* 因此,基本上您在 Chrome 中看到的所有数据在 Firefox 中都将不可见,反之亦然反之亦然。
这正是您的情况。
现有 IndexedDB 但版本号不同:
如果 IndexedDB 已经存在,并且新请求的版本号与现有数据存储不同,则 onsuccess 和 onupgradeneeded 都会被触发。这也意味着您看不到旧数据。
现有的 IndexedDB 和相同的版本号:
如果 IndexedDB 已经存在,并且新请求的版本号与现有数据存储相同,则只会触发 onsuccess 而不会触发 onupgradeneeded。这与简单地打开数据存储区以供访问一样好,因此可以看到与之前相同的数据。
附带说明,onsuccess 和 onupgradeneeded 的触发顺序是 - onupgradeneeded 将首先触发(如果触发),因为这是您创建方案或数据存储的地方,然后 onsuccess 事件将被触发,您可以在其中保存数据库处理程序以供将来进行选择、更新等操作。
【讨论】: