Событие storage: согласованность вкладок и границы приватности
Используйте storage для обновлений одного источника, учитывая исключение окна-записывателя, разделы, задержки и приватность.
BotBrowser Team
Нужна структурированная документация по теме Идентичность?
Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.
Событие storage сообщает об изменении веб-хранилища, но не является общей транзакцией. Когда одно окно меняет localStorage, другие подходящие документы того же источника могут получить событие; окно, выполнившее запись, собственного события не получает. На доставку влияют источник, контекст и раздел хранения. BotBrowser может предоставить изолированные профильные фикстуры и записать видимые результаты, но не открывает хранилище другого источника и не гарантирует отсутствие гонок, порядок или сохранность после закрытия.
TL;DR
- Изменение
localStorageможет уведомить другие Documents того же источника. - Window, выполняющая запись, не получает это событие.
sessionStorageимеет другой охват и не является общим каналом вкладок.- Событие не является журналом, транзакцией, доказательством личности или гарантией порядка.
- Проверяйте наличие хранилища, учитывайте гонки и сохраняйте резервный путь.
Содержание
- Что означает событие изменения хранилища
- Источник, контекст и приватность
- Интерфейс с учётом гонок и резерв
- Тесты с BotBrowser
- Итог
Что означает событие изменения хранилища
Получатель видит key, oldValue, newValue, storageArea и url, но не историю и не подтверждение сервера. Получатель может загрузиться после записи, быть приостановлен или закрыт. При необходимости перечитывайте текущее состояние. Window-записыватель обновляет свой интерфейс напрямую.
localStorage обычно общий для контекстов одного источника, а sessionStorage связан с верхним контекстом и обычно разделяет вкладки. См. WHATWG о веб-хранилище, справочник MDN о событии хранилища и MDN о веб-хранилище.
Уведомление не блокирует параллельные записи и не решает конфликт. Используйте ревизию, проверяйте значение и предлагайте слияние или повтор, когда две вкладки редактируют одну запись.
Источник, контекст и приватность
Схема, хост и порт образуют источник. Поддомены, порты, sandbox-фреймы, приватные окна и разделы хранения могут видеть разные значения. Наличие или отсутствие ключа не устанавливает личность: это может быть новый контекст, очистка или отказ в доступе.
Не синхронизируйте токены и приватные документы. Ограничивайте телеметрию целью и сроком. Принципы приватности W3C поддерживают минимизацию. Событие не авторизует операцию.
Интерфейс с учётом гонок и резерв
Начните с интерфейса, работающего без хранилища и событий. Проверьте доступ, обработайте ошибку квоты, обновите окно-записыватель и заставьте другие контексты перечитать запись. Объединяйте всплески, ограничивайте чтения и оставляйте доступный повтор. При отсутствии события используйте ручное обновление или проверку сервера.
Проверьте пустое хранилище, отказ, запись того же значения, removeItem, clear, повреждённые данные, старую ревизию, перезагрузку, скрытую вкладку и немедленное закрытие. Базовый контент должен оставаться доступным.
Тесты с BotBrowser
BotBrowser позволяет запускать изолированные фикстуры, наблюдать Window-записыватель и объявленные контексты, а также записывать видимые результаты. Он не открывает хранилище другого источника и не гарантирует отсутствие гонок, порядок событий или сохранность после закрытия. Используйте синтетические ключи и сохраняйте версию браузера, тестовый источник, контекст, ревизию, результат и резерв.
Итог
Событие хранилища является уведомлением одного источника с исключением окна-записывателя. Обновляйте себя локально, перечитывайте состояние в получателях и учитывайте гонки, разделы и жизненный цикл. Идентичность, авторизацию и сохранность нельзя выводить из события. BotBrowser делает авторизованные фикстуры повторяемыми, не меняя правил браузера.
Дополнительные материалы
- Разделение браузерного хранилища и приватность
- Cookies, localStorage и IndexedDB
- Сообщения same-origin через BroadcastChannel
Источники
Похожие статьи
Переведите BotBrowser из исследований в продакшн
Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.