MessageEvent
消息事件接口,这一章其实是对后续章节的一个总括介绍,因为后续章节,基本上都需要使用本章节所介绍的接口—MessageEvent。简而言之,无论是跨文档通信,通道通信,服务推送还是WebSocket都会用到MessageEvent,触发message事件的执行。
MessageEvent源码
[Constructor(DOMString type, optional MessageEventInit eventInitDict), Exposed=(Window,Worker)] interface MessageEvent : Event { readonly attribute any data; readonly attribute USVString origin; readonly attribute DOMString lastEventId; readonly attribute MessageEventSource? source; readonly attribute FrozenArray<MessagePort> ports; void initMessageEvent(DOMString type, boolean bubbles, boolean cancelable, any data, USVString origin, DOMString lastEventId, MessageEventSource? source, sequence<MessagePort> ports); }; dictionary MessageEventInit : EventInit { any data = null; USVString origin = ""; DOMString lastEventId = ""; MessageEventSource? source = null; sequence<MessagePort> ports = []; }; typedef (WindowProxy or MessagePort or ServiceWorker) MessageEventSource;
说明
- event.data:消息中的返回数据,包含任意字符串的数据,由原始脚本发送
- event.origin:包含原始文档、域名以及端口的字符串,一般用于跨文档通信和服务推送
- event.lastEventId:包含当前消息事件唯一标识符的字符串,一般用于服务推送
- event.source:原始文件窗口的引用,比如WindowProxy对象,一般用于跨文档通信
- event.ports:包含MessagePort对象发送消息的数组,一般用于跨文档通信和通道通信到
注意
MessageEvent继承于DOM Event API且属性共享,但是,通信事件没有冒泡而且不能取消,同时也没有默认行为。