2

I have the problem that after registering the service worker the navigator.serviceWorker.controller always is null.

I want to use postMessage to send a message to the service worker. However, navigator.serviceWorker.controller always returns null, and shows the error TypeError: Cannot read property 'postMessage' of null.

Sometimes I can use navigator.serviceWorker.controller.postMessage, but at other times navigator.serviceWorker.controller returns null, I am not sure how to deal with this issue...

I have done some research, but I still cannot fix my issue...

Has anybody any ideas?

Thanks, Terry

Here is the test page that I created. https://terrylee7788.github.io/test_web_worker.html

4

1 回答 1

7

Use navigator.serviceWorker.ready

navigator.serviceWorker.ready.then(function(serviceWorkerRegistration) {
  // Let's see if you have a subscription already
  return serviceWorkerRegistration.pushManager.getSubscription();
})
.then(function(subscription) {
  if (!subscription) {
    // You do not have subscription
  }
  // You have subscription.
  // Send data to service worker
  navigator.serviceWorker.controller.postMessage({'data': dataToServiceWorker});

})

于 2016-04-06T15:48:01.767 回答