2015-06-03 3 views
1

Сегодня мы можем найти множество примеров отправки сообщения от сервисного работника клиенту, но всегда после приема события message в обслуживающем работнике.Публикация сообщений от сервисного работника на клиентскую страницу

Я хотел бы знать, можем ли мы отправлять сообщения независимо от этого события? И если да, то как? Я пробовал несколько вещей, без успеха ...

В моем случае это перенаправление клиента на новую страницу, когда мой работник службы получает событие push.

ответ

1

Интерфейс для Client.postMessage() описан в https://github.com/slightlyoff/ServiceWorker/issues/609. К сожалению, он не полностью реализован в Google Chrome с версии 45, хотя я ожидаю, что он перейдет к версии позже.

Когда доступны функциональные возможности, вы можете использовать self.clients.matchAll() для получения списка открытых страниц, которые контролируются сотрудником службы, и вызвать метод postMessage() на конкретном клиенте, который вас интересует. Вы должны иметь в виду, что вполне возможно, что не будет никаких вкладок, открытых с помощью страницы, контролируемой вашим работником службы, и в этом случае вам нужно сделать что-то вроде открытия новой клиентской страницы с вашим целевым URL.

Но, есть метод, который, вероятно, более подходит для вашего случая использования (хотя и не в настоящее время поддерживает в Chrome 45): WindowClient.navigate(), который будет инструктировать вкладку открытой контролируемую вашего работника службы, чтобы перейти к другому URL на то же происхождение.

1

client.js:

const swListener = new BroadcastChannel('swListener'); 
swListener.onmessage = function(e) { 
    console.log('swListener Received', e.data); 
}; 

сервис-worker.js

const swListener = new BroadcastChannel('swListener'); 
    swListener.postMessage('This is From SW'); 
Смежные вопросы