API канала широковещательной передачи
Базовая Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с марта 2022 года.
Примечание: Эта функция доступна в Потоках выполнения JavaScript.
API канала широковещательной передачи позволяет осуществлять базовый обмен данными между контекстами просмотра (то есть, окнами, вкладками, кадрами или фреймами iframes) и потоками выполнения на том же исходе.
Примечание: Точнее, обмен данными разрешен между контекстами просмотра, использующими ту же разделённую область хранилища. Хранилище разделяется в первую очередь по сайтам верхнего уровня — например, если у вас открыта одна страница по адресу a.com , которая встраивает iframe с адреса b.com, и другая страница открыта по адресу b.com, то iframe не сможет общаться со второй страницей, несмотря на то, что они находятся на одном и том же исходе. Однако, если первая страница также находится по адресу b.com, то iframe сможет общаться со второй страницей.
Создав объект BroadcastChannel, вы можете получать любые сообщения, отправленные в него. Вам не нужно хранить ссылки на фреймы или потоки выполнения, с которыми вы хотите обмениваться данными: они могут «подписаться» на конкретный канал, создав свой собственный объект BroadcastChannel с тем же именем, и осуществлять двусторонний обмен данными между всеми объектами.
Интерфейс канала широковещательной передачи
Создание или присоединение к каналу
Клиент присоединяется к каналу широковещательной передачи, создавая объект BroadcastChannel. Его конструктор принимает один параметр: имя канала. Если это первый подключившийся к каналу с таким именем, то подразумевающий канал создается.
// Connection to a broadcast channel
const bc = new BroadcastChannel("test_channel");
Отправка сообщения
Достаточно вызвать метод postMessage() на созданном объекте BroadcastChannel, который принимает любой объект в качестве аргумента. Пример с текстовым сообщением:
// Example of sending of a very simple message
bc.postMessage("This is a test message.");
Данные, отправляемые в канал, сериализуются с помощью алгоритма структурированного клонирования. Это означает, что вы можете безопасно отправлять различные объекты данных без необходимости их самостоятельной сериализации.
API не накладывает никаких ограничений на семантику сообщений, поэтому код должен сам понимать, какие сообщения ожидать и как с ними обращаться.
Получение сообщения
При отправке сообщения событие message отправляется каждому объекту BroadcastChannel, подключенному к этому каналу. Функция может быть запущена для этого события с помощью обработчика событий onmessage:
// A handler that only logs the event to the console:
bc.onmessage = (event) => {
console.log(event);
};
Отключение канала
Чтобы выйти из канала, вызовите метод close() на объекте. Это отключает объект от базового канала, позволяя сборку мусора.
// Disconnect the channel bc.close();
Заключение
Самодостаточный интерфейс API канала широковещательной передачи позволяет обмениваться данными между контекстами. Его можно использовать для определения действий пользователя в других вкладках того же исхода, например, при входе или выходе пользователя.
Протокол обмена сообщениями не определен, и разные контексты просмотра должны реализовывать его сами; не существует никаких переговоров или требований со стороны спецификации.
Интерфейсы
BroadcastChannel-
Представляет собой именованный канал, к которому любой контекст просмотра данного исхода может подключиться.
Спецификации
| Спецификация |
|---|
| HTML # broadcasting-to-other-browsing-contexts |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | |
BroadcastChannel |
54 | 79 | 38 | 41 | 15.4 | 54 | 38 | 41 | 15.4 | 6.0 | 54 |
Broadcast_Channel_API |
54 | 79 | 38 | 41 | 15.4 | 54 | 38 | 41 | 15.4 | 6.0 | 54 |
close |
54 | 79 | 38 | 41 | 15.4 | 54 | 38 | 41 | 15.4 | 6.0 | 54 |
message_event |
54 | 79 | 38 | 41 | 15.4 | 54 | 38 | 41 | 15.4 | 6.0 | 54 |
messageerror_event |
60 | 79 | 57 | 47 | 15.4 | 60 | 57 | 47 | 15.4 | 8.0 | 60 |
name |
54 | 79 | 38 | 41 | 15.4 | 54 | 38 | 41 | 15.4 | 6.0 | 54 |
postMessage |
54 | 79 | 38 | 41 | 15.4 | 54 | 38 | 41 | 15.4 | 6.0 | 54 |
См. также
-
BroadcastChannel, интерфейс, его реализующий.
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API