我正在尝试将服务工作人员收到的数据传回网页。
在网页'navigator.serviceWorker.controller'为空。服务工作者将self.client视为空。
任何样品或说明都会有所帮助
答案 0 :(得分:0)
您可以做的是获取一个窗口客户端列表,它将返回您的源的选项卡列表,然后向每个窗口客户端发送一条消息。 (此代码位于setBackgroundMessageHandler()
):
const promiseChain = clients.matchAll({
type: 'window',
includeUncontrolled: true
})
.then((windowClients) => {
for (let i = 0; i < windowClients.length; i++) {
const windowClient = windowClients[i];
windowClient.postMessage(data);
}
})
.then(() => {
return registration.showNotification('my notification title');
});
return promiseChain;
然后要在页面中接收消息,请添加如下的监听器:
navigator.serviceWorker.addEventListener('message', function(event) {
console.log('Received a message from service worker: ', event.data);
});