如果用户在多个标签页中打开同一个Web应用程序的多个实例,任何一个实例都可以通过注册storage
事件监听器来接收其他实例对localStorage
进行更改的通知。接收到此类通知的标签页可以根据更改做出相应反应,例如更新UI。
Indexed DB似乎没有提供类似方便的机制来进行此类通知。那么,在对Indexed DB进行更改时,是否需要使用localStorage
向其他标签页“发送”通知?唯一的其他选择可能是轮询,这显然不如storage
事件好用。
如果用户在多个标签页中打开同一个Web应用程序的多个实例,任何一个实例都可以通过注册storage
事件监听器来接收其他实例对localStorage
进行更改的通知。接收到此类通知的标签页可以根据更改做出相应反应,例如更新UI。
Indexed DB似乎没有提供类似方便的机制来进行此类通知。那么,在对Indexed DB进行更改时,是否需要使用localStorage
向其他标签页“发送”通知?唯一的其他选择可能是轮询,这显然不如storage
事件好用。
目前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上的仓库上提交错误报告。
更新