API Сообщений Каналов
Примечание: Эта функция доступна в Потоках JavaScript.
API Сообщений Каналов позволяет двум отдельным скриптам, работающим в разных контекстах просмотра, прикреплённых к одному документу (например, два IFrames, или основной документ и IFrame, два документа через SharedWorker, или два потока), обмениваться сообщениями напрямую через двунаправленные каналы (или трубы) с портом на каждом конце.
Концепции и использование
Канал сообщений создаётся с помощью конструктора MessageChannel(). После создания, два порта канала можно получить через свойства MessageChannel.port1 и MessageChannel.port2 (которые оба возвращают объекты MessagePort.) Приложение, создавшее канал, использует port1, а приложение на другом конце порта использует port2 — вы отправляете сообщение в port2, и передаёте владение портом в другой контекст просмотра с помощью window.postMessage вместе с двумя аргументами (сообщение для отправки и объект, передающий владение, в данном случае сам порт.)
При передаче этих передаваемых объектов, они больше не доступны в контексте, к которому они ранее принадлежали. После отправки порт больше не может использоваться исходным контекстом.
Другой контекст просмотра может прослушивать сообщение с помощью onmessage и получить содержимое сообщения с помощью атрибута data события. Затем вы можете ответить, отправив сообщение обратно в исходный документ с помощью MessagePort.postMessage.
Когда вы хотите прекратить отправку сообщений по каналу, вы можете вызвать MessagePort.close для закрытия портов.
Дополнительную информацию о том, как использовать этот API, см. в разделе Использование обмена сообщениями через каналы.
Интерфейсы
MessageChannel-
Создаёт новый канал сообщений для отправки сообщений.
MessagePort-
Управляет портами в канале сообщений, позволяя отправлять сообщения с одного порта и прослушивать их получение на другом.
Примеры
- Мы опубликовали демо канала сообщений basic на GitHub (запустить его онлайн), который демонстрирует очень простой пример передачи одного сообщения между страницей и встраиваемым
<iframe>. - Вы также можете посмотреть демо multimessaging (запустить онлайн), который демонстрирует несколько более сложную настройку, которая может отправлять несколько сообщений между основной страницей и IFrame.
Спецификации
| Спецификация |
|---|
| HTML # channel-messaging |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
Channel_Messaging_API |
2 | 12 | 41 | 10.6 | 5 | 18 | 41 | 11 | 4.2 | 1.0 | 4.4 |
close |
2 | 12 | 41 | 10.6 | 5 | 18 | 41 | 11 | 4.2 | 1.0 | 4.4 |
message_event |
2 | 12 | 41 | 10.6 | 5 | 18 | 41 | 11.5 | 4.2 | 1.0 | ≤37 |
messageerror_event |
60 | 18 | 57 | 47 | 16.4 | 60 | 57 | 47 | 16.4 | 8.0 | 60 |
postMessage |
2 | 12 | 41 | 10.6 | 5 | 18 | 41 | 11 | 4.2 | 1.0 | 4.4 |
start |
2 | 12 | 41 | 10.6 | 5 | 18 | 41 | 11 | 4.2 | 1.0 | 4.4 |
worker_support |
4 | 12 | 41 | ≤15 | 5 | 18 | 41 | ≤14 | 4.2 | 1.0 | ≤37 |
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
MessageChannel |
2 | 12 | 41 | 10.6 | 5 | 18 | 41 | 11 | 4.2 | 1.0 | 4.4 |
Channel_Messaging_API |
2 | 12 | 41 | 10.6 | 5 | 18 | 41 | 11 | 4.2 | 1.0 | 4.4 |
port1 |
2 | 12 | 41 | 10.6 | 5 | 18 | 41 | 11 | 4.2 | 1.0 | 4.4 |
port2 |
2 | 12 | 41 | 10.6 | 5 | 18 | 41 | 11 | 4.2 | 1.0 | 4.4 |
api.КаналСообщений
Таблицы BCD загружаются только в браузере
api.ПортСообщений
Таблицы BCD загружаются только в браузере
См. также
© 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/Channel_Messaging_API