当 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 条目在其他选项卡中更改时收到通知的主要内容,如果未能解决你的问题,请参考以下文章

chrome背景选项卡中的自动播放声音

Symfony 的 web profiler 的性能选项卡中的 Controller 条目是啥?

选项卡内容布局显示在其他选项卡中

在选项卡更改时动态更改 iframe 的高度?

如何在浏览器多个选项卡中处理用户注销?

JQuery Tabs - 在输入条目上更改选项卡的背景颜色