当在其他选项卡中更改indexedDB条目时,收到通知

24

如果用户在多个标签页中打开同一个Web应用程序的多个实例,任何一个实例都可以通过注册storage事件监听器来接收其他实例对localStorage进行更改的通知。接收到此类通知的标签页可以根据更改做出相应反应,例如更新UI。

Indexed DB似乎没有提供类似方便的机制来进行此类通知。那么,在对Indexed DB进行更改时,是否需要使用localStorage向其他标签页“发送”通知?唯一的其他选择可能是轮询,这显然不如storage事件好用。

3个回答

34

目前Indexed DB没有定义“观察者”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才能使用它,因此它在生产环境中还不可用。我们很乐意听取反馈意见-请在GitHub上的仓库上提交错误报告


有关这方面的任何消息吗?标准轨道等等?观察员的级别可能会在哪个水平上? - Leo
7
没有新消息。W3C标签小组提供了一些关于API设计的反馈,我们(Chrome)需要将其整合进来并获取开发者的反馈。 - Joshua Bell

3
Dexie 3.2内置了可观测性(无需使用Dexie.Observable)。它使用BroadcastChannel在浏览上下文之间通信以传达更改。它只能观察使用Dexie>=3.2进行的更改(因为仍然没有稳定的本地API来执行此操作)。

1

你知道Dexie.Observable是如何实现的吗? - RushPL
@RushPL - 从实现上看,Dexie.Observable似乎使用LocalStorage(它具有内置事件以通知其他标签中的更改)来发送有关其IndexedDB更改的消息。 - Josh Kelley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接