Я решил это, добавив это в файл рабочего сервиса:
self.addEventListener('push', function (e) {
if (e.data) {
var payloadData = e.data.json();
self.clients.matchAll({includeUncontrolled: true}).then(function (clients) {
clients[0].postMessage(payloadData); // you can do foreach but I only needed one client to open one window
});
}
});
И это в файле main.js:
function openNotificationWindow(url) {
var myWindow = window.open(url); // Opens a new window
myWindow.focus();
myWindow.location.reload(true);
}
navigator.serviceWorker.addEventListener('message', function (event) {
if (typeof event.data.data !== 'undefined') {
openNotificationWindow(url);
}
});
Теперь каждый раз, когда я отправляю уведомление либо св окне на переднем плане или на заднем плане событие работника push
запускается в сервисной программе, а затем использует postMessage()
для соединения с некоторым файлом main.js, где у вас есть доступ к компоненту window
DOM.