3

Today we can find many examples of sending message from a service worker to a client, but always following the reception of a message event in the service worker.

I would like to know if we can send messages independently of this event? And if yes, how? I tried few things, without success...

In my case, it's for redirect a client to a new page when my service worker receives a push event.

4

2 回答 2

9

客户端.js:

const swListener = new BroadcastChannel('swListener');
swListener.onmessage = function(e) {
  console.log('swListener Received', e.data);
};

服务工作者.js

  const swListener = new BroadcastChannel('swListener');
   swListener.postMessage('This is From SW');
于 2017-09-30T14:06:13.277 回答
1

的接口Client.postMessage()https://github.com/slightlyoff/ServiceWorker/issues/609中描述。不幸的是,它并没有在 Google Chrome 45 版中完全实现,尽管我希望它会在以后成为一个版本。

当该功能可用时,您可以使用self.clients.matchAll()获取由服务工作者控制的任何打开页面的列表,并postMessage()在您关心的特定客户端上调用该方法。您需要记住,完全有可能在您的服务工作者控制的页面上不会打开任何选项卡,在这种情况下,您需要执行一些操作,例如使用您的目标 URL 打开一个新的客户端页面。

但是,有一种方法可能更适合您的用例(尽管 Chrome 45 目前也不支持):WindowClient.navigate()它将指示由您的服务工作者控制的打开选项卡导航到同一来源的不同 URL。

于 2015-06-03T15:21:22.873 回答