Client.postMessage()

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

Client 接口的 Client.postMessage() 方法允许一个服务worker客户端向一个  ServiceWorker发送一个消息。

Syntax

Client.postMessage(message[, transfer]);

Returns

Void.

Parameters

message
The message to send to the service worker.
transfer 可选
A transferable object such as, for example, a reference to a port.

Examples

This code snippet is taken from the service worker post-message sample (see post-message live.) The code sends message data and transfers the port to the service worker so that it can reply via Client.postMessage().

The message is wrapped in a promise that resolves if the response doesn't contain an error and rejects with the error.

function sendMessage(message) {
  return new Promise(function(resolve, reject) {
     var messageChannel = new MessageChannel();
     messageChannel.port1.onmessage = function(event) {
       if (event.data.error) {
         reject(event.data.error);
       } else {
         resolve(event.data);
       }
     };
    navigator.serviceWorker.controller.postMessage(message, [messageChannel.port2]);
  });
}

Specifications

Specification Status Comment
Service Workers
postMessage()
Working Draft Initial definition.

Browser compatibility

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 45.0[1] 44.0 (44.0)[2] 未实现 ? 未实现
Feature Android Android Webview Firefox Mobile (Gecko) Firefox OS IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support 未实现 未实现 44.0 (44.0) ? 未实现 ? 未实现 45.0 [1]

文档标签和贡献者