веб-уведомление firebase - как использовать document или window.document в firebase-messaging-sw.js - PullRequest
0 голосов
/ 27 сентября 2019

На моем сайте реализовано сетевое уведомление firebase.Я сталкиваюсь с проблемой при использовании window.document или объекта документа в сервисном работнике firebase-messaging-sw.js.

messaging.setBackgroundMessageHandler(function(payload) {
  // Handle notification when site is in background

  // // Blink title
  var isOldTitle = true;
  var oldTitle = document.title;
  var newTitle =  "(1) New Work Order";
  var interval = null;
  interval = setInterval(function(){
      document.title = isOldTitle ? oldTitle : newTitle;
      isOldTitle = !isOldTitle;
  }, 700);

  // send web browser notification
  var payloadData = JSON.parse(payload.data.notification);
  var notificationOptions = {
    body: payloadData.body,
    icon: payloadData.icon,
    click_action: payloadData.click_action
  };
  return self.registration.showNotification(payloadData.title,notificationOptions);

});

Может кто-нибудь предложить мне способ использования объекта документа в firebase-messaging-sw.js.

По сути, я хочу добиться - получить уведомление, я хочу изменить заголовок моего веб-сайта.

1 Ответ

1 голос
/ 27 сентября 2019

Окно или объект документа не будут доступны внутри служебного рабочего файла.Единственный способ - это общаться с вашими html или js файлами.Связь может быть отправлена ​​через postmessage api в serviceworker.

self.clients.matchAll().then(clients => {
    clients.forEach(client => {
      client.postmessage(/*data*/);
    });
  });

В вашем основном документе прослушайте сообщения от работника сервиса, используя:

navigator.serviceWorker.onmessage = (event) => {
  console.log('message from sw');
  /*Here change the document title*/
}
...