这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
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] |
- [1] Behind a flag in Chrome 40 through 44.
- [2] Service workers (and Push) have been disabled in the Firefox 45 & 52 Extended Support Releases (ESR.)