MessageEvent
Базовая Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Примечание: Эта функция доступна в Потоках выполнения Web Workers.
Интерфейс MessageEvent представляет собой сообщение, полученное целевым объектом.
Используется для представления сообщений в:
-
Потоковых событиях сервера (см. событие
messageEventSource). -
Веб-сокеты (см. событие
messageWebSocket). - Обмене сообщениями между документами (см.
Window.postMessage()и событиеmessageWindow). -
Обмене сообщениями через каналы (см.
MessagePort.postMessage()и событиеmessageMessagePort). - Обмене сообщениями между рабочими потоками/документами (см. вышеуказанные пункты, а также
Worker.postMessage(), событиеmessageWorker, событиеmessageServiceWorkerGlobalScopeи т. д.) -
Каналы широковещательной рассылки (см.
BroadcastChannel.postMessage()и событиеmessageBroadcastChannel). - Каналы данных WebRTC (см. событие
messageRTCDataChannel).
Действие, вызываемое этим событием, определяется в функции, установленной в качестве обработчика событий для соответствующего события message.
Конструктор
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