Получайте уведомления, когда запись indexedDB изменяется на другой вкладке

Если пользователь открывает несколько экземпляров веб-приложения на нескольких вкладках, любой экземпляр может быть уведомлен об изменениях в localStorage, которые вносит любой другой экземпляр, путем регистрации прослушивателя событий storage. Вкладка, получающая такое уведомление, может затем отреагировать и, например. обновить пользовательский интерфейс в соответствии с изменениями.

Индексированная БД не предлагает такого же удобного механизма для таких уведомлений. Нужно ли использовать localStorage для «отправки» уведомления на другие вкладки при внесении изменений в индексированную БД? Единственной другой альтернативой может быть опрос, который явно уступает storage событиям.


person Thomas W    schedule 20.10.2015    source источник


Ответы (2)


Для индексированной базы данных не определен текущий API-интерфейс «наблюдателя». Тем не менее, он находится в списке запрашиваемых функций, и есть аналогичные предложения как от Mozilla, так и от Google.

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

То есть: да, вам нужно придумать какой-то пользовательский механизм взаимодействия между таблицами, такой как опрос, события хранения, настройка ссылок MessageChannel (Chrome), BroadcastChannel (Firefox) или использование Service Worker в качестве ретранслятора между клиенты.


НОВОСТИ!

В Chrome есть экспериментальный API Indexed DB Observers. Вам нужно запустить хром с --enable-experimental-web-platform-features, чтобы использовать его, поэтому он пока бесполезен в производстве. Мы хотели бы получить отзывы об этом — файл ошибки в репозитории github.

person Joshua Bell    schedule 21.10.2015
comment
Есть новости по этому поводу? Отслеживание стандартов и т. д.? На каком уровне, вероятно, будут находиться наблюдатели? - person Leo; 16.12.2017
comment
Нет новостей. W3C Tag предоставил некоторые отзывы о дизайне API, которые мы (Chrome) должны внедрить и получить отзывы разработчиков. - person Joshua Bell; 18.12.2017

Обновлять

  1. У Dexie теперь есть надстройка для Observables, если вы начинаете с нового проекта: https://dexie.org/docs/Observable/Dexie.Observable
  2. Олег крепко зацепил обертку хранения Ionic. Но это можно создать для любой локальной библиотеки хранения. Солидная инженерия. https://medium.com/@OlegVaraksin/how-to-make-ionic-storage-reactive-acdd8996f1e6
person feder    schedule 07.11.2019
comment
Есть идеи, как это реализует Dexie.Observable? - person RushPL; 06.05.2020
comment
@RushPL. Судя по реализации, Dexie.Observable использует LocalStorage (у которого есть встроенные события для уведомления об изменениях на других вкладках) для отправки сообщений об изменениях в IndexedDB. - person Josh Kelley; 16.04.2021