ExtendableMessageEvent - ServiceWorker API 中的接口

这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

ExtendableMessageEventServiceWorker API 中的接口,表示 message 事件的事件对象在服务 worker 上触发(当在 ServiceWorkerGlobalScope 上从另一个上下文收到通道消息时) - 可延长该类事件的生命周期。

该接口继承了 ExtendableEvent 接口。

构造函数

ExtendableMessageEvent.ExtendableMessageEvent()

创建一个新的 ExtendableMessageEvent 对象实例。

属性

从其父接口 ExtendableEvent 继承了属性。

ExtendableMessageEvent.data 只读

返回事件的数据。它可以是任何数据类型。

ExtendableMessageEvent.origin 只读

返回发送消息的 ServiceWorkerClient 的来源

ExtendableMessageEvent.lastEventId 只读

server-sent events中表示事件源的最后一个事件 ID。

ExtendableMessageEvent.source 只读

返回对发送消息的服务 worker 的引用。

ExtendableMessageEvent.ports 只读

返回包含 MessagePort 对象的数组,该对象表示关联消息通道的端口。

方法

从其父接口 ExtendableEvent 继承了方法。

实例

当在服务 worker 内部使用以下代码通过通道消息,将通过 PushMessageData 接收的数据发送到主上下文来响应推送消息时, onmessage 的事件对象将是 ExtendableMessageEvent

var port;

self.addEventListener('push', function(e) {
  var obj = e.data.json();

  if(obj.action === 'subscribe' || obj.action === 'unsubscribe') {
    port.postMessage(obj);
  } else if(obj.action === 'init' || obj.action === 'chatMsg') {
    port.postMessage(obj);
  }
});

self.onmessage = function(e) {
  console.log(e);
  port = e.ports[0];
}

规范

规范 状态 备注
Service Workers
ExtendableMessageEvent 的定义
编者的草案 初始定义。

桌面浏览器兼容性

特性 Chrome Edge Firefox Internet Explorer Opera Safari
基础支持 未知 未知 未知 未知 未知 未知
data 未知 未知 未知 未知 未知 未知
lastEventId 未知 17 未知 未知 未知 未知
origin 未知 未知 未知 未知 未知 未知
ports 未知 未知 未知 未知 未知 未知
source 未知 未知 未知 未知 未知 未知

移动浏览器兼容性

特性 Android Chrome for Android Edge mobile Firefox for Android IE mobile Opera Android iOS Safari
基础支持 未知 未知 未知 未知 未知 未知 未知
data 未知 未知 未知 未知 未知 未知 未知
lastEventId 未知 未知 17 未知 未知 未知 未知
origin 未知 未知 未知 未知 未知 未知 未知
ports 未知 未知 未知 未知 未知 未知 未知
source 未知 未知 未知 未知 未知 未知 未知

相关链接