navigator.serviceWorker.controller在页面刷新之前为空

时间:2016-07-03 08:49:04

标签: javascript angularjs service-worker

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

2 个答案:

答案 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)

确保您的服务人员的范围包括相关的网址。