当 indexedDB 条目在其他选项卡中更改时收到通知
Posted
技术标签:
【中文标题】当 indexedDB 条目在其他选项卡中更改时收到通知【英文标题】:Get notified when indexedDB entry gets changed in other tab 【发布时间】:2016-01-19 04:25:09 【问题描述】:如果用户在多个选项卡中打开 Web 应用程序的多个实例,则可以通过注册 storage
事件侦听器来通知任何其他实例对 localStorage
所做的更改。收到此类通知的选项卡可能会做出反应,例如根据更改更新 UI。
索引数据库似乎没有为此类通知提供类似的便捷机制。每当对索引数据库进行更改时,是否必须使用localStorage
向其他选项卡“发送”通知?唯一的其他选择可能是轮询,这显然不如storage
事件。
【问题讨论】:
【参考方案1】:Dexie 3.2 内置了可观察性(没有 Dexie.Observable)。它使用 BroadcastChannel 跨浏览上下文传达更改。它只能观察使用 Dexie>=3.2 所做的更改(因为仍然没有稳定的原生 API 来执行此操作)。
【讨论】:
【参考方案2】:更新
-
Dexie 现在有一个用于 Observables 的插件,以防您开始一个新项目:https://dexie.org/docs/Observable/Dexie.Observable
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) 需要引入这些反馈并获得开发人员的反馈。以上是关于当 indexedDB 条目在其他选项卡中更改时收到通知的主要内容,如果未能解决你的问题,请参考以下文章