use "navigator.serviceWorker.controller.postMessage" it will alway "TypeError: Cannot read property 'postMessage' of null"

use "navigator.serviceWorker.controller.postMessage" it will alway "TypeError: Cannot read property 'postMessage' of null"

我有一个问题,在注册 service worker 后 navigator.serviceWorker.controller 总是 null

我想使用 postMessage 向 service worker 发送消息。 然而,navigator.serviceWorker.controller总是returnsnull, 并显示错误 TypeError: Cannot read property 'postMessage' of null.

有时我可以使用navigator.serviceWorker.controller.postMessage,但其他时候navigator.serviceWorker.controller returns null, 我不确定如何处理这个问题...

我做了一些研究,但我仍然无法解决我的问题...

有人有什么想法吗?

谢谢, 特里

这是我创建的测试页。 https://terrylee7788.github.io/test_web_worker.html

使用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});

})