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;  

说明

  1. event.data:消息中的返回数据,包含任意字符串的数据,由原始脚本发送
  2. event.origin:包含原始文档、域名以及端口的字符串,一般用于跨文档通信和服务推送
  3. event.lastEventId:包含当前消息事件唯一标识符的字符串,一般用于服务推送
  4. event.source:原始文件窗口的引用,比如WindowProxy对象,一般用于跨文档通信
  5. event.ports:包含MessagePort对象发送消息的数组,一般用于跨文档通信和通道通信到

注意

MessageEvent继承于DOM Event API且属性共享,但是,通信事件没有冒泡而且不能取消,同时也没有默认行为。