MessagePort
Базовая Широко доступная *
Эта функция хорошо зарекомендовала себя и работает во многих устройствах и версиях браузеров. Она доступна в браузерах с сентября 2015 года.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Примечание: Эта функция доступна в Web Workers.
Интерфейс MessagePort из API канальной связи представляет собой один из двух портов MessageChannel, позволяющий отправлять сообщения с одного порта и получать их на другом.
MessagePort — это передаваемый объект.
Методы экземпляра
Наследует методы от родительского класса, EventTarget.
postMessage()-
Отправляет сообщение с порта и, необязательно, передает владение объектами другим контекстам просмотра.
start()-
Запускает отправку сообщений, помещенных в очередь на порту (необходимо только при использовании
EventTarget.addEventListener; подразумевается при использованииonmessage). close()-
Отключает порт, поэтому он больше не активен.
События
Наследует события от родительского класса, EventTarget.
message-
Срабатывает, когда объект
MessagePortполучает сообщение. messageerror-
Срабатывает, когда объект
MessagePortполучает сообщение, которое нельзя десериализовать.
Пример
В приведенном ниже примере показано создание нового канала с использованием конструктора MessageChannel().
После загрузки IFrame мы регистрируем обработчик onmessage для MessageChannel.port1 и передаем MessageChannel.port2 в IFrame с помощью метода window.postMessage вместе с сообщением.
Когда сообщение возвращается из IFrame, функция onMessage выводит сообщение в абзац.
const channel = new MessageChannel();
const output = document.querySelector(".output");
const iframe = document.querySelector("iframe");
// Wait for the iframe to load
iframe.addEventListener("load", onLoad);
function onLoad() {
// Listen for messages on port1
channel.port1.onmessage = onMessage;
// Transfer port2 to the iframe
iframe.contentWindow.postMessage("Hello from the main page!", "*", [
channel.port2,
]);
}
// Handle messages received on port1
function onMessage(e) {
output.innerHTML = e.data;
}
Полный рабочий пример см. в нашем демо базовой канальной связи на GitHub (запустить онлайн).
Спецификации
| Спецификация |
|---|
| HTML # message-ports |
Совместимость с браузерами
| Рабочие столы | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
MessagePort |
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 |
См. также
© 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/MessagePort