Spec-Zone.ru › Web APIs

MessagePort: событие message

Базовая Широко поддерживается

Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с сентября 2015 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Примечание: Эта функция доступна в Web Workers.

Событие message срабатывает на объекте MessagePort, когда на этом канале появляется сообщение.

Это событие не может быть отменено и не распространяется.

Синтаксис

Используйте имя события в методах, таких как addEventListener(), или задайте свойство обработчика события.

addEventListener("message", (event) => {});

onmessage = (event) => {};

Тип события

Объект MessageEvent. Наследуется от Event.

Событие MessageEvent

Свойства события

Этот интерфейс также наследует свойства от своего родителя, 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API