服务工作者和网页之间的通信

时间:2016-02-24 16:25:53

标签: service-worker

我正在开发一个应用程序,其目标是定期向用户发送通知(例如,每小时一次)。 我的想法是使用一个服务工作程序,该服务工作程序可以在选项卡关闭后运行,并继续向用户发送这些通知。 网页需要能够与服务工作者沟通有关这些通知的具体细节,消息应该是什么,应该在什么时间间隔运行等等。

我无法理解网页如何与现有服务工作者进行通信,有没有办法让我知道在网页打开和设置后我是否已经注册了服务工作者服务工作者和网页之间的沟通?

这是我正在思考的一个模糊的例子:

// Web Application
worker = registerServiceWorker({ scope: '/static/' }).then(registration => {
    // Verify that everything went well
}); 

postMessageToWorker() {
    // Find the existing worker and send him a message
    // I'm guessing I would receive a callback with the desired response here
}

// Service worker
onmessage('start', () => {
    // Start the interval and send the user notifications
}

onmessage('update', () => {
    // Receive info about updates and apply them
}

1 个答案:

答案 0 :(得分:3)

您可以使用navigator.serviceWorker.getRegistration获取现有注册。

您可以使用postMessage API与服务工作者进行通信。 ServiceWorker Cookbook上有一个简单的例子。

请注意,当您的页面被关闭时,服务工作者将不会继续运行,迟早会被杀死。 对于您的用例,似乎Web Push API可行。 ServiceWorker Cookbook上有一些此API的示例。