今天我们可以找到许多从服务工作者向客户端发送消息的示例,但总是在服务工作者收到message
事件之后。
我想知道我们是否可以独立发送此事件的消息?如果是,怎么样?我尝试了几件事,没有成功......
就我而言,当我的服务人员收到push
事件时,它会将客户端重定向到新页面。
答案 0 :(得分:4)
client.js:
const swListener = new BroadcastChannel('swListener');
swListener.onmessage = function(e) {
console.log('swListener Received', e.data);
};
服务worker.js
const swListener = new BroadcastChannel('swListener');
swListener.postMessage('This is From SW');
答案 1 :(得分:1)
Client.postMessage()
描述了https://github.com/slightlyoff/ServiceWorker/issues/609的界面。遗憾的是,自版本45以来,谷歌Chrome并未完全实现,但我希望它能够在以后的版本中将其变为版本。
当功能可用时,您可以使用self.clients.matchAll()
获取服务工作者正在控制的任何打开页面的列表,并在您关注的特定客户端上调用postMessage()
方法。您需要记住,完全有可能不会打开任何由服务工作者控制的页面打开的选项卡,在这种情况下,您需要执行诸如使用目标URL打开新客户端页面之类的操作。 / p>
但是,有一种方法可能更适合您的使用案例(虽然目前还不支持Chrome 45):WindowClient.navigate()
,它会指示由您的服务控制的打开标签页工作人员导航到同一来源的不同URL。