我对服务工作者和客户沟通有疑问。我正在查看这篇文章和其他博客,但都没有工作。我在Chrome最新版本中收到错误。
Communcation between service worker and web page
我尝试使用navigator.serviceWorker.controller.postMessage({'command': 'trimCaches'});
但我在Chrome中收到错误,无法读取属性'控制器'未定义的
。进一步调查显示控制器中没有可用的postMessage方法。任何人都可以帮助我。
我的要求是向服务工作者发送一些消息/数据。
答案 0 :(得分:1)
此错误 “无法读取未定义的属性'controller' ,表示导航器中没有可用的serviceWorker。换句话说,页面上没有注册服务工作者。这可能是因为没有,页面刚刚加载或注册期间出错。由于错误消息清楚地表明导航器中没有serviceWorker,因此不能成为调查的控制器,我不完全确定你是什么意思进一步调查控制器。
我猜你在调用navigator.serviceWorker.controller.postMessage()时注册不完整。我建议您注册SW并在SW脚本中包含消息接收逻辑。然后,在加载页面并从开发人员工具中检查SW真正已注册之后,您可以在浏览器的控制台中使用postMessage API。
确保只在控制器上调用postMessage的另一种方法是在serviceWorker.register()Promise处理程序中包含该逻辑。