Service Worker - 控制器上没有postMessage方法

时间:2017-09-22 17:36:53

标签: service-worker progressive-web-apps

我对服务工作者和客户沟通有疑问。我正在查看这篇文章和其他博客,但都没有工作。我在Chrome最新版本中收到错误。

Communcation between service worker and web page

我尝试使用navigator.serviceWorker.controller.postMessage({'command': 'trimCaches'});

但我在Chrome中收到错误,无法读取属性'控制器'未定义的

。进一步调查显示控制器中没有可用的postMessage方法。任何人都可以帮助我。

我的要求是向服务工作者发送一些消息/数据。

1 个答案:

答案 0 :(得分:1)

此错误 “无法读取未定义的属性'controller' ,表示导航器中没有可用的serviceWorker。换句话说,页面上没有注册服务工作者。这可能是因为没有,页面刚刚加载或注册期间出错。由于错误消息清楚地表明导航器中没有serviceWorker,因此不能成为调查的控制器,我不完全确定你是什么意思进一步调查控制器。

我猜你在调用navigator.serviceWorker.controller.postMessage()时注册不完整。我建议您注册SW并在SW脚本中包含消息接收逻辑。然后,在加载页面并从开发人员工具中检查SW真正已注册之后,您可以在浏览器的控制台中使用postMessage API。

确保只在控制器上调用postMessage的另一种方法是在serviceWorker.register()Promise处理程序中包含该逻辑。

这也可能对您有所帮助https://serviceworke.rs/message-relay.html