BroadcastChannel: сообщения одного источника и границы приватности
Координируйте контексты одного источника через BroadcastChannel, сохраняя границы жизненного цикла, резервного режима и приватности.
BotBrowser Team
Нужна структурированная документация по теме Платформа?
Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.
BroadcastChannel позволяет вкладкам, окнам, worker и фреймам одного источника обмениваться коротким уведомлением. Это не общий транспорт, не сигнал аутентификации и не доказательство принадлежности двух контекстов одному человеку. Доставка зависит от модели источников браузера, а пропущенное или задержанное сообщение имеет много обычных причин. BotBrowser может повторить авторизованную фикстуру одного источника и записать видимые результаты доставки, закрытия и повторного открытия, но не может передавать сообщения между источниками, ослаблять same-origin policy или гарантировать время доставки в разных версиях.
TL;DR
- Используйте BroadcastChannel для координации контекстов одного источника.
- Закрывайте каналы после работы и считайте перезагрузку, приостановку и завершение нормальными состояниями.
- Проверяйте наличие API и сохраняйте резерв:
storage, worker или обновление с сервера. - Доступность канала не доказывает аутентификацию, личность, местоположение или доверие.
- BotBrowser повторяет авторизованные фикстуры, но не пересекает источники и не гарантирует время.
Содержание
- Что передаёт BroadcastChannel
- Границы источника и приватности
- Жизненный цикл и резерв
- Тесты с BotBrowser
- Итог
Что передаёт BroadcastChannel
new BroadcastChannel(name) создаёт именованный канал для текущего источника и группы контекста. postMessage() использует structured clone для подходящих контекстов с тем же именем. Отправитель не получает собственное сообщение. Канал не является долговечной очередью и не даёт подтверждения доставки.
Используйте стабильное имя и короткую нагрузку, например {version: 3, type: 'cart-changed', key: 'cart'}. Не помещайте туда токены, полные записи или приватный текст. Канал должен побуждать перечитать авторитетное состояние, а не заменять транзакцию. Сначала запишите изменение, затем отправьте уведомление; после размонтирования снимите listener и вызовите close().
Доставка выполняется по возможности. Контекст может закрыться, замерзнуть или появиться после отправки. Неклонируемое значение также вызывает ошибку. Обработчики должны переживать повторы и старые события, сравнивая ревизию перед изменением интерфейса.
Границы источника и приватности
Браузер сравнивает схему, хост и порт. Разные поддомены или порты не разделяют канал, даже если принадлежат одной организации. Песочница может создать непрозрачный источник, а разделение хранилища изменить доступность.
Доставка в рамках одного источника не устанавливает личность. Пропуск сообщения не доказывает ошибку изоляции: проверьте источник, имя, время подписки, жизненный цикл и возможность клонирования. См. раздел WHATWG о web messaging, руководство MDN BroadcastChannel и политику same-origin.
Не связывайте имена и нагрузки с аккаунтами, платежами и точным местоположением. Событие draft-updated не сообщает, кто ввёл текст, где находится человек и какое устройство авторитетно. Принципы приватности W3C поддерживают ограничение цели и минимизацию данных.
Жизненный цикл и резерв
Начните с базового варианта, работающего без API. Проверьте BroadcastChannel, создавайте его только при необходимости и сохраняйте страницу рабочей при ошибке. storage, общий worker и обновление с сервера имеют разные свойства, поэтому описывайте их как разные резервные пути.
При навигации закройте старый канал. После перезагрузки сначала перечитайте состояние. При возврате из скрытой вкладки обновитесь, если данные важны. Обработчики делайте идемпотентными, ограничивайте очередь и оставляйте видимую повторную попытку. Проверьте отсутствие API, неверное имя, неверный источник, закрытие, позднего получателя, ошибку clone, приостановку и завершение worker.
Тесты с BotBrowser
BotBrowser позволяет повторить авторизованную фикстуру нескольких контекстов одного источника, записать видимую доставку и результаты закрытия или повторного открытия, а также сравнить заявленные версии браузера. Он не может передавать между источниками, обходить same-origin policy, гарантировать время в разных версиях или считать доступность канала доказательством личности. Используйте синтетические данные и сохраняйте только версию, тестовый источник, состояние listener, видимый результат и резервный путь.
Итог
BroadcastChannel является подсказкой для координации контекстов одного источника. Храните авторитетное состояние отдельно, закрывайте каналы при переходах, делайте обработчики идемпотентными и сохраняйте полноценный резерв. BotBrowser делает авторизованное сравнение повторяемым, а политика источников, авторизация, жизненный цикл и приватность остаются у управляющих ими систем.
Дополнительные материалы
- Исследование приватности браузера по открытым спецификациям
- Поддержка функций браузера и качество функций
- Тестовые фикстуры автоматизации и изоляция
Источники
Похожие статьи
Переведите BotBrowser из исследований в продакшн
Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.