Перейти к содержимому

Web Messaging

MessageChannel, MessagePort и MessageEvent в пределах одного realm.

На этой странице

MessageChannel, MessagePort и MessageEvent обеспечивают обмен сообщениями в пределах одного realm. Эти возможности не создают границы воркера.

MessageChannel и MessagePort

const channel = new MessageChannel();

channel.port2.onmessage = (event) => {
  console.log(event.data);
};

channel.port1.postMessage({ hello: "world" });
// handler runs synchronously

Канал создаёт два связанных порта. MessagePort нельзя создать напрямую.

  • postMessage(value, transfer?) отправляет партнёру копию значения.
  • Сообщения буферизуются, пока принимающий порт не запущен.
  • Присваивание onmessage запускает порт.
  • start() выдаёт буферизованные сообщения.
  • close() разъединяет пару и отбрасывает сообщения в очереди.
  • Доступны onmessage, onmessageerror и onclose.

Поведение клонирования

Примитивные значения, массивы, простые объекты, циклические ссылки, значения Date, RegExp, Map, Set и ArrayBuffer копируются с сохранением их типов JavaScript и содержимого. Функции сразу отклоняются с DataCloneError.

MessageEvent

MessageEvent расширяет Event и предоставляет data, origin, lastEventId, source и ports. Устаревший метод initMessageEvent() также доступен.

Ограничения жизненного цикла воркеров описаны в разделе node:worker_threads.

Reference

Status: Partial · Not measured

Exports

ExportKindStatusNotes
MessageEventclassPartialmissing WindowProxy and ServiceWorker as MessageEventSource (non-browser). data, origin, lastEventId, source, ports, initMessageEvent()
MessageChannelclassPartialmissing WindowProxy and ServiceWorker as MessageEventSource (non-browser). port1, port2
MessagePortclassPartialmissing WindowProxy and ServiceWorker as MessageEventSource (non-browser). postMessage(), start(), close(), onclose, onmessage, onmessageerror

Была ли эта страница полезной?