представляет пару соединенных друг с другом объектов
MessagePort
. Вызов метода postMessage в любом из них сгенерирует событие «message* в другом. Если в программе потребуется создать частный канал связи с окном
Window
или фоновым потоком выполнения
Worker
, можно создать объект
MessageChannel
и затем передать один объект
MessagePort
из этой пары окну или потоку выполнения (используя аргумент ports метода
postMessage
).
Типы
MessageChannel
и
MessagePort
являются нововведением, появившимся в спецификации HTML5, и на момент написания этих строк некоторые броузеры поддерживали меж доменный обмен сообщениями (раздел 22.3) и фоновые потоки выполнения (раздел 22.4) без применения частных каналов связи на основе объектов
MessagePort
.
Конструктор
new MessageChannel
Этот конструктор, не имеющий аргументов, возвращает новый объект
MessageChannel
.
Свойства
readonly MessagePort port1
readonly MessagePort port2
Два соединенных друг с другом порта, образующих канал обмена данными. Оба порта являются совершенно равноценными: достаточно просто один сохранить в своем программном коде, а другой передать окну
Window
или фоновому потоку выполнения
Worker
, с которым требуется организовать обмен данными.
MessageEvent
сообщение из другого контекста выполнения Event
Различные прикладные интерфейсы используют события «message» для организации асинхронных взаимодействий между независимыми контекстами выполнения. Все объекты -
Window
,
Worker, WebSocket, EventSource
и
MessagePort
– определяют свойство
onmessage
для регистрации обработчика события «message». Сообщение, связанное с событием «message», может быть любым значением, допустимым в языке JavaScript, которое можно скопировать, как описывается во врезке «Структурированные копии» в главе 22. Сообщение заключается в объект
MessageEvent
и доступно в виде свойства
data
. Различные прикладные интерфейсы, опирающиеся на событие «message», могут определять дополнительные свойства в объекте
MessageEvent
. События «message» не всплывают, и для них не предусмотрено действий по умолчанию, которые можно было бы отменить.
Свойства
readonly any data
Это свойство хранит доставленное сообщение. Свойство
data
может иметь значение любого типа, которое можно скопировать с применением алгоритма структурированного копирования (врезка «Структурированные копии» в главе 22). К ним относятся значения базового JavaScript, включая объекты и массивы, но не функции. Некоторые значения клиентского JavaScript, такие как узлы
Document
и
Element
, не могут передаваться, но могут передаваться объекты
Blob
и
ArrayBuffer
.
readonly string lastEventld
Для событий «message» в интерфейсе
EventSource
(раздел 18.3) это поле содержит строку
lastEventld
, если имеется, отправленную сервером.
readonly string origin
Для событий «message» в интерфейсах
EventSource
(раздел 18.3) или
Window
(раздел 22.3) это свойство содержит URL-адрес отправителя сообщения.
readonly MessagePort[] ports
Для
событий «message» в интерфейсах
Window
(раздел 22.3),
Worker
(раздел 22.4) и
MessagePort
это свойство содержит массив объектов
MessagePort
, если он был передан соответствующему вызову
postMessage.
readonly Window source
Для событий «message» в интерфейсе
Window
(раздел 22.3) это свойство ссылается на объект
Window
, отправивший сообщение.
MessagePort
передает асинхронные сообщения (EventTarget)
Объект
MessagePort
используется для передачи асинхронных сообщений в виде событий, обычно между различными контекстами выполнения, такими как окна или фоновые потоки выполнения. Объекты
MessagePort
должны использоваться в виде связанных пар: см.
MessageChannel
. Вызов метода
postMessage
объекта
MessagePort
генерирует событие «message» в связанном с ним объекте
MessagePort
. Прикладной интерфейс обмена меж доменными сообщениями (раздел 22.3) и фоновые потоки выполнения (раздел 22.4) также взаимодействуют с использованием объектов
postMessage
и событий
message
. Эти прикладные интерфейсы фактически неявно используют объект
MessagePort
. Явное использование объектов
MessageChannel
и
MessagePort
позволяет создавать дополнительные, частные каналы обмена данными и может применяться, например, для организации непосредственных взаимодействий двух соседних фоновых потоков выполнения.
Типы
MessageChannel
и
MessagePort
являются нововведением, появившимся в спецификации HTML5, и на момент написания этих строк некоторые броузеры поддерживали меж доменный обмен сообщениями (раздел 22.3) и фоновые потоки выполнения (раздел 22.4) без применения частных каналов связи на основе объектов
MessagePort
.
Методы
void close
Отключает данный объект
MessagePort
от порта, к которому он был подключен (если таковой имеется). Последующие вызовы метода
postMessage
не будут иметь никакого эффекта, и в будущем сообщения «message» приходить не будут.
Отправляет копию сообщения message через порт и передает его в форме события «message» порту, с которым соединен данный порт. Если указан аргумент ports, его значение также будет доставлено вместе с событием «message». Аргумент message может иметь любое значение, совместимое с алгоритмом структурированного копирования (врезка «Структурированные копии» в главе 22).
void start
Запускает механизм возбуждения событий «message» в объекте
MessagePort
. До вызова этого метода все данные, отправляемые через порт, будут сохраняться в буфере. Подобная задержка событий позволяет сценариям зарегистрировать все обработчики событий до того, как будет отправлено хоть одно сообщение. Имейте, однако, в виду, что вызывать этот метод необходимо только при использовании метода
addEventListener
интерфейса
EventTarget
. Если сценарий регистрирует обработчик посредством свойства