2016-02-24 4 views
3

Я работаю над приложением, в котором цель отправляет пользователю уведомление через регулярный интервал (например, каждый час). Моя идея состояла в том, чтобы использовать сервисного работника, который мог работать после закрытия вкладки и продолжать отправлять пользователю эти уведомления. Веб-страница должна иметь возможность связываться с сотрудником службы о конкретных подробностях об этих уведомлениях, каково должно быть сообщение, с какого промежутка времени он должен работать и тому подобное.Общение между служебным работником и веб-страницей

У меня возникли проблемы с пониманием того, как веб-страница может связаться с существующим работником службы, есть ли способ узнать, есть ли у меня уже зарегистрированный рабочий, работающий после открытия и установки веб-страницы связь между сервисным работником и веб-страницей?

Вот расплывчатым пример того, что я имею в виду:

// 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 
} 

ответ

3

Вы можете использовать navigator.serviceWorker.getRegistration получить существующую регистрацию.

Вы можете связаться с сервисным работником, используя postMessage API. Пример: ServiceWorker Cookbook.

Обратите внимание, что рабочий сервис не будет работать, когда ваша страница будет закрыта, рано или поздно он будет убит. Для вашего случая использования, похоже, будет работать Web Push API. Существует несколько примеров этого API на ServiceWorker Cookbook.

Смежные вопросы