MessagePort: событие message
Базовая Широко поддерживается
Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с сентября 2015 года.
Примечание: Эта функция доступна в Web Workers.
Событие message срабатывает на объекте MessagePort, когда на этом канале появляется сообщение.
Это событие не может быть отменено и не распространяется.
Синтаксис
Используйте имя события в методах, таких как addEventListener(), или задайте свойство обработчика события.
addEventListener("message", (event) => {});
onmessage = (event) => {};
Тип события
Объект MessageEvent. Наследуется от Event.
Свойства события
Этот интерфейс также наследует свойства от своего родителя, Event.
-
MessageEvent.dataТолько для чтения -
Данные, отправленные отправителем сообщения.
-
MessageEvent.originТолько для чтения -
Строка, представляющая источник отправителя сообщения.
-
MessageEvent.lastEventIdТолько для чтения -
Строка, представляющая уникальный идентификатор события.
-
MessageEvent.sourceТолько для чтения -
Объект
MessageEventSource(который может быть WindowProxy,MessagePortилиServiceWorker) представляющий отправителя сообщения. -
MessageEvent.portsТолько для чтения -
Массив, содержащий все объекты
MessagePort, отправленные вместе с сообщением, в порядке.
Примеры
Предположим, что скрипт создаёт MessageChannel и отправляет один из портов в другой контекст просмотра, например, в другой <iframe>, используя код такого типа:
const channel = new MessageChannel();
const myPort = channel.port1;
const targetFrame = window.top.frames[1];
const targetOrigin = "https://example.org";
const messageControl = document.querySelector("#message");
const channelMessageButton = document.querySelector("#channel-message");
channelMessageButton.addEventListener("click", () => {
myPort.postMessage(messageControl.value);
});
targetFrame.postMessage("init", targetOrigin, [channel.port2]);
Целевой объект может принять порт и начать прослушивание сообщений на нём, используя код такого типа:
window.addEventListener("message", (event) => {
const myPort = event.ports[0];
myPort.addEventListener("message", (event) => {
received.textContent = event.data;
});
myPort.start();
});
Обратите внимание, что слушатель должен вызвать MessagePort.start() прежде чем любые сообщения будут доставлены в этот порт. Это необходимо только при использовании метода addEventListener(): если получатель использует onmessage вместо него, то start() вызывается неявно:
window.addEventListener("message", (event) => {
const myPort = event.ports[0];
myPort.onmessage = (event) => {
received.textContent = event.data;
};
});
Спецификации
| Спецификация |
|---|
| HTML # event-message |
| HTML # handler-messageport-onmessage |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
message_event |
2 | 12 | 41 | 10.6 | 5 | 18 | 41 | 11.5 | 4.2 | 1.0 | ≤37 |
См. также
- Связанные события:
messageerror. - Использование обмена сообщениями через канал
© 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/message_event