Книга: JavaScript. Подробное руководство, 6-е издание
MessagePort
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» приходить не будут.
void postMessage(any message, [MessagePort[] ports])
Отправляет копию сообщения message через порт и передает его в форме события «message» порту, с которым соединен данный порт. Если указан аргумент ports, его значение также будет доставлено вместе с событием «message». Аргумент message может иметь любое значение, совместимое с алгоритмом структурированного копирования (врезка «Структурированные копии» в главе 22).
void start()
Запускает механизм возбуждения событий «message» в объекте MessagePort
. До вызова этого метода все данные, отправляемые через порт, будут сохраняться в буфере. Подобная задержка событий позволяет сценариям зарегистрировать все обработчики событий до того, как будет отправлено хоть одно сообщение. Имейте, однако, в виду, что вызывать этот метод необходимо только при использовании метода addEventListener()
интерфейса EventTarget
. Если сценарий регистрирует обработчик посредством свойства onmessage
, метод start()
будет вызван неявно.
Обработчики событий
onmessage
Это свойство определяет обработчик событий «message». События «message» генерируются в объекте MessagePort
. Они не всплывают, и для них не предусматривается действий по умолчанию. Обратите внимание, что при установке этого свойства вызывается метод start(),
который запускает механизм возбуждения событий «message».
- ApplicationCache
- ArrayBuffer
- ArrayBufferView
- Attr
- Audio
- BeforeUnloadEvent
- Blob
- BlobBuilder
- Button
- Canvas
- BlobBuilder
- Button
- Canvas
- CanvasGradient
- CanvasPattern
- CanvasRenderingContext2D
- ClientRect
- CloseEvent
- Comment
- Console
- ConsoleCommandLine
- CSS2Properties
- CSSRule
- CSSStyleDeclaration
- CSSStyleSheet
- DataTransfer
- DataView
- Document
- DocumentFragment
- DocumentType
- DOMException
- DOMImplementation
- DOMSettableTokenList
- DOMTokenList
- Element
- ErrorEvent
- Event
- EventSource
- EventTarget
- FieldSet
- File
- FileError
- FileReader
- FileReaderSync
- Form
- FormControl
- Form Data
- FormValidity
- Geocoordinates
- Geolocation
- GeolocationError
- Geoposition
- HashChangeEvent
- History
- HTMLCollection
- HTMLDocument
- HTMLEIement
- HTMLFormControlsCollection
- HTMLOptionsCollection
- IFrame
- Image
- ImageData
- Input
- jQuery jQuery 1.4
- KeyEvent
- Label
- Link
- Location
- MediaElement
- MediaError
- MessageChannel
- MessageEvent
- MessagePort
- Meter
- MouseEvent
- Navigator
- Node
- NodeList
- Option
- Output
- PageTransitionEvent
- PopStateEvent
- ProcessingInstruction
- Progress
- ProgressEvent
- Screen
- Script
- Select
- Storage
- StorageEvent
- Style
- Table
- TableCell
- TableRow
- TableSection
- Text
- TextArea
- TextMetrics
- TimeRanges
- TypedArray
- URL
- Video
- WebSocket
- Window
- Worker
- WorkerGlobalScope
- WorkerLocation
- WorkerNavigator
- XMLHttpRequest
- XMLHttpRequestUpload