Uncaught (в обещании): TypeError: Невозможно прочитать свойство 'showNotification' из неопределенного - PullRequest
0 голосов
/ 29 мая 2019

Я хочу добавить уведомление браузера в свое приложение, поэтому я создал эту функцию:

showNotification() {
    navigator.serviceWorker.getRegistration()
    .then( function(reg){

      reg.showNotification('finish button clicked');
    });
  }

, которую я вызываю отсюда:

stop() {
this.showNotification();
}

, но я получаю эту ошибку:

ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'showNotification' of undefined

что я делаю не так?и есть ли лучший способ использовать уведомления браузера без каких-либо сообщений от бэкэнда?

1 Ответ

0 голосов
/ 29 мая 2019

Возможно, вы что-то не так сделали с вашим serviceWorkerRegistration процессом,

. Также вы должны заметить, что getRegistration() возвращает обещание, которое разрешает либо serviceWorkerRegistration object, либо undefined, поэтому сделайте проверку до того, какуведомление о вызове

showNotification() {
    navigator.serviceWorker.getRegistration()
    .then( function(reg){
        if(reg) {
        reg.showNotification('finish button clicked');
       } else {
         console.log('GOT undefined');
       }
    });
  }

См. serviceWorkerRegistration в Angular

Чтобы увидеть текущее состояние вашего сервис-работника, вы можете получить следующее:

navigator.serviceWorker.register('/sw.js', {scope: '/'})
  .then(function (registration) {
    var serviceWorker;
    if (registration.installing) {
      serviceWorker = registration.installing;
    } else if (registration.waiting) {
      serviceWorker = registration.waiting;
    } else if (registration.active) {
      serviceWorker = registration.active;
    }

    if (serviceWorker) {
      console.log("ServiceWorker phase:", serviceWorker.state);

      serviceWorker.addEventListener('statechange', function (e) {
        console.log("ServiceWorker phase:", e.target.state);
      });
    }
  }).catch(function (err) {
    console.log('ServiceWorker registration failed: ', err);
  });
...