我使用angularjs并使用服务工作者接收推送通知。 但navigator.serviceWorker.controller在页面刷新之前为空,我不知道如何解决这个问题
一些服务人员的代码:
blog
并在收到推送时向serviceworker中的客户端发送消息:
self.addEventListener('push', pwServiceWorker.pushReceived);
self.addEventListener('notificationclick', pwServiceWorker.notificationClicked);
// refresh caches
self.addEventListener('activate', function (event)
{
event.waitUntil(
caches.keys().then(function (cacheNames)
{
return Promise.all(
cacheNames.map(function (cacheName)
{
return caches.delete(cacheName);
})
);
})
);
});
mainController.js中的给出如下消息:
self.clients.matchAll().then(function(all) {
console.log(all);
all.forEach(function(client) {
client.postMessage(data);
});
});
答案 0 :(得分:23)
这是预期的行为。要在不等待刷新/重新打开的情况下控制所有打开的页面,您必须将这些命令添加到服务工作者:
self.addEventListener('install', function(event) {
event.waitUntil(self.skipWaiting()); // Activate worker immediately
});
self.addEventListener('activate', function(event) {
event.waitUntil(self.clients.claim()); // Become available to all pages
});
您可以在skipWaiting()文档和clients.claim()文档中详细了解它们。
答案 1 :(得分:0)
确保您的服务人员的范围包括相关的网址。