Сервисный работник не получает старые push-уведомления о событиях щелчка в Windows 10 для Chrome - PullRequest
0 голосов
/ 11 октября 2018

когда у нас есть 2 push-уведомления в истории уведомлений windows 10, тогда в браузере открывается только последнее уведомление при нажатии на него для Chrome.Но в браузере Firefox и Edge все уведомления открываются в браузере.

Вот мой код работника сервиса.Событие push:

if (!(self.Notification && self.Notification.permission === 'granted')) {
        return;
    }
    var data = {};
    if (event.data) {
        data = event.data.json();
    } else {
        console.log('received empty data for push notification');
    }
    let notificationTitle = data.title;
const notificationOptions = {
        body: data.bodyText,
        icon: data.imageUrl,
        sticky:false,
        notificationCloseEvent:false,
        data: {
          url: data.conversationUrl,
        },
      };
     const message = {notificationTitle, notificationOptions};
      const promise = isClientFocused()
                        .then((clientIsFocused) => {
                            if (clientIsFocused) {
                                console.log('App is in focus no need to show notification');
                                return;
                            } else {
                                return firstWindowClient().then((windowClient) => {
                                    console.log('URL is already in open');
                                    windowClient.postMessage(message);
                                }, () => {
                                    console.log('Url is not in open.');
                                    return self.registration.showNotification(notificationTitle, notificationOptions);
                                });
                            }
                        });
      event.waitUntil(promise);
    });

Событие щелчка уведомления:

self.addEventListener('notificationclick', (event) => {
       const urlToOpen = new URL(event.notification.data.url, self.location.origin).href;

  const promiseChain = clients.matchAll({
    type: 'window',
    includeUncontrolled: true
  })
  .then((windowClients) => {
    let matchingClient = null;

    for (let i = 0; i < windowClients.length; i++) {
      const windowClient = windowClients[i];
      if (windowClient.url === urlToOpen) {
        matchingClient = windowClient;
        break;
      }
    }

    if (matchingClient) {
      return matchingClient.focus();
    } else {
      return clients.openWindow(urlToOpen);
    }
  });

  event.waitUntil(promiseChain);
    });
...