Spec-Zone.ru › Web APIs

MessageEvent

Базовая Широко доступна

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

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

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

Интерфейс MessageEvent представляет собой сообщение, полученное целевым объектом.

Используется для представления сообщений в:

  • Потоковых событиях сервера (см. событие message EventSource).
  • Веб-сокеты (см. событие message WebSocket).
  • Обмене сообщениями между документами (см. Window.postMessage() и событие message Window).
  • Обмене сообщениями через каналы (см. MessagePort.postMessage() и событие message MessagePort).
  • Обмене сообщениями между рабочими потоками/документами (см. вышеуказанные пункты, а также Worker.postMessage(), событие message Worker, событие message ServiceWorkerGlobalScope и т. д.)
  • Каналы широковещательной рассылки (см. BroadcastChannel.postMessage() и событие message BroadcastChannel).
  • Каналы данных WebRTC (см. событие message RTCDataChannel).

Действие, вызываемое этим событием, определяется в функции, установленной в качестве обработчика событий для соответствующего события message.

Событие MessageEvent

Конструктор

MessageEvent()

Создаёт новый MessageEvent.

Свойства экземпляра

Этот интерфейс также наследует свойства от своего родителя, Event.

MessageEvent.data Только для чтения

Данные, отправленные источником сообщения.

MessageEvent.origin Только для чтения

Строка, представляющая происхождение источника сообщения.

MessageEvent.lastEventId Только для чтения

Строка, представляющая уникальный идентификатор события.

MessageEvent.source Только для чтения

Объект MessageEventSource (который может быть WindowProxy, MessagePort или ServiceWorker) , представляющий собой источник сообщения.

MessageEvent.ports Только для чтения

Массив объектов MessagePort, содержащих все объекты MessagePort, отправленные с сообщением в порядке.

Методы экземпляра

Этот интерфейс также наследует методы от своего родителя, Event.

initMessageEvent() Устарел

Инициализирует событие сообщения. Не используйте это больше — используйте конструктор MessageEvent() вместо этого.

Примеры

В нашем примере с общим рабочим потоком (запустить общий рабочий поток) у нас есть две HTML-страницы, каждая из которых использует JavaScript для выполнения вычислений. Разные скрипты используют один и тот же файл рабочего потока для выполнения вычислений — они оба могут получить к нему доступ, даже если их страницы выполняются в разных окнах.

Следующий фрагмент кода демонстрирует создание объекта SharedWorker с помощью конструктора SharedWorker(). Оба скрипта содержат это:

const myWorker = new SharedWorker("worker.js");

Затем оба скрипта обращаются к рабочему потоку через объект MessagePort, созданный с помощью свойства SharedWorker.port. Если обработчик события onmessage прикреплён с помощью addEventListener, порт запускается вручную с помощью метода start().

myWorker.port.start();

После запуска порта оба скрипта отправляют сообщения в рабочий поток и обрабатывают сообщения, отправленные из него, соответственно, с помощью port.postMessage() и port.onmessage.

[first, second].forEach((input) => {
  input.onchange = () => {
    myWorker.port.postMessage([first.value, second.value]);
    console.log("Message posted to worker");
  };
});

myWorker.port.onmessage = (e) => {
  result1.textContent = e.data;
  console.log("Message received from worker");
};

Внутри рабочего потока мы используем обработчик onconnect для подключения к тому же порту, который обсуждался выше. Порты, связанные с этим рабочим потоком, доступны в свойстве connect события connect — затем мы используем метод MessagePort объекта MessagePort, чтобы запустить порт, и обработчик onmessage для обработки сообщений, отправленных из основных потоков.

onconnect = (e) => {
  const port = e.ports[0];

  port.addEventListener("message", (e) => {
    const workerResult = `Result: ${e.data[0] * e.data[1]}`;
    port.postMessage(workerResult);
  });

  port.start(); // Required when using addEventListener. Otherwise called implicitly by onmessage setter.
};

Спецификации

Спецификация
HTML
# the-messageevent-interface

Совместимость с браузерами

Рабочий стол Мобильный
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet WebView Android
MessageEvent 16 14 26 ≤12.1 6 18 26 ≤12.1 6 1.0 4.4
MessageEvent 2 12 3 10.6 4 18 4 11 3.2 1.0 ≤37
data 2 12 3 ≤12.1 4 18 4 ≤12.1 3.2 1.0 ≤37
initMessageEvent 2 12 3 ≤12.1 4 18 4 ≤12.1 3.2 1.0 ≤37
lastEventId 2 17 3 ≤12.1 4 18 4 ≤12.1 3.2 1.0 ≤37
origin 2 12 3 ≤12.1 4 18 4 ≤12.1 3.2 1.0 ≤37
ports 4 12 3 ≤12.1 4 18 4 ≤12.1 3.2 1.0 ≤37
source 2 12 3 ≤12.1 4 18 4 ≤12.1 3.2 1.0 ≤37
userActivation 72 79 Нет 60 Нет 72 Нет 51 Нет 11.0 72

См. также

  • ExtendableMessageEvent — аналогично этому интерфейсу, но используется в интерфейсах, которые требуют большей гибкости для авторов.

© 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/MessageEvent

Spec-Zone.ru

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