【问题标题】:Get notified when indexedDB entry gets changed in other tab当 indexedDB 条目在其他选项卡中更改时收到通知
【发布时间】:2016-01-19 04:25:09
【问题描述】:

如果用户在多个选项卡中打开 Web 应用程序的多个实例,则可以通过注册 storage 事件侦听器来通知任何其他实例对 localStorage 所做的更改。收到此类通知的选项卡可能会做出反应,例如根据更改更新 UI。

索引数据库似乎没有为此类通知提供类似的便捷机制。每当对索引数据库进行更改时,是否必须使用localStorage 向其他选项卡“发送”通知?唯一的其他选择可能是轮询,这显然不如storage 事件。

【问题讨论】:

    标签: javascript local-storage dom-events indexeddb


    【解决方案1】:

    Dexie 3.2 内置了可观察性(没有 Dexie.Observable)。它使用 BroadcastChannel 跨浏览上下文传达更改。它只能观察使用 Dexie>=3.2 所做的更改(因为仍然没有稳定的原生 API 来执行此操作)。

    【讨论】:

      【解决方案2】:

      更新

      1. Dexie 现在有一个用于 Observables 的插件,以防您开始一个新项目:https://dexie.org/docs/Observable/Dexie.Observable
      2. Oleg 在 Ionic 存储包装纸上做了一个实心挂钩。但这可以为任何本地存储库创建。坚实的工程。 https://medium.com/@OlegVaraksin/how-to-make-ionic-storage-reactive-acdd8996f1e6

      【讨论】:

      • 知道 Dexie.Observable 是如何实现的吗?
      • @RushPL - 从略读实现来看,Dexie.Observable 使用 LocalStorage(它确实具有通知其他选项卡中的更改的内置事件)来发送有关其 IndexedDB 更改的消息。跨度>
      【解决方案3】:

      目前没有为索引数据库定义“观察者”API。但是,它在功能请求列表中,Mozilla 和 Google 也有类似的提议。

      https://github.com/w3c/IndexedDB/issues/51

      也就是说:是的,你需要想出一些自定义的跨表通信机制,比如轮询,存储事件,设置MessageChannel链接(Chrome),BroadcastChannel(Firefox),或者使用Service Worker作为客户端之间的中继。


      新闻快讯!

      Chrome 有一个实验性的Indexed DB Observers API。您需要使用 --enable-experimental-web-platform-features 运行 chrome 才能使用它,因此它在生产中还没有用。我们很乐意收到有关它的反馈 - 文件 bugs on the github repo

      【讨论】:

      • 有这方面的消息吗?标准轨道等?观察者可能处于什么级别?
      • 没有消息。 W3C Tag 就 API 设计提供了一些反馈,我们 (Chrome) 需要引入这些反馈并获得开发人员的反馈。
      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多