将来自messaging.setBackgroundMessageHandler的通知数据传递到网页

时间:2017-06-26 03:54:09

标签: firebase service firebase-cloud-messaging worker

我正在尝试将服务工作人员收到的数据传回网页。

在网页'navigator.serviceWorker.controller'为空。服务工作者将self.client视为空。

任何样品或说明都会有所帮助

1 个答案:

答案 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);
  });