PostMessage от serviceWorker после события push

Мне нужно отправить сообщение от serviceWorker на страницу после push-события. Я не могу указать свойство порта (например, https://jakearchibald.github.io/isserviceworkerready/demos/postMessage/), потому что я не отправлял это сообщение

Этот код не работает (может я что-то не так делаю)

self.registration.active.postMessage('fsdfasf');

person Nikolay Marow    schedule 24.04.2015    source источник


Ответы (1)


Следуя спецификациям, кажется, что правильная реализация выбирает Client из Service Worker, а затем с помощью метода postMessage, например:

onmessage = function(event){
  clients.matchAll().then(function(clients){
    clients[0].postMesssage('yourmessage');
  });
}
person Sandro Paganotti    schedule 26.04.2015
comment
И чтобы прослушать это сообщение на контролируемой странице, вы должны использовать что-то вроде navigator.serviceWorker.addEventListener('ServiceWorkerMessageEvent', function(e) {...}); Это изменилось, начиная с Chrome 45; см. chromestatus.com/feature/5163630974730240 - person Jeff Posnick; 15.07.2015
comment
@JeffPosnick на самом деле это работает: navigator.serviceWorker.addEventListener('message', e => console.log(e)); - person Martin Ždila; 10.06.2016