Я не могу хранить данные из setBackgroundMessageHandler - PullRequest
0 голосов
/ 24 апреля 2019

Я использую Firebase для отправки уведомлений. Когда я получаю уведомление в фоновом режиме, я получаю данные. Я хочу сохранить эти данные в локальном хранилище, но получаю эту ошибку

TypeError: Невозможно прочитать свойство 'setItem' из неопределенного

importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-messaging.js');
firebase.initializeApp({
  messagingSenderId: '628214501041'
});
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function (payload) {
  console.log('[firebase-messaging-sw.js] Received background message ', payload);
  var notificationTitle = 'Background Message Title';
  var notificationOptions = {
    body: 'Background Message body.',
  };
  return self.registration.showNotification(notificationTitle,
    notificationOptions);
});
self.addEventListener('push', function (event) {
  var pushData = event.data.json();
  try {
    if(self.window.localStorage){
      self.localStorage.setItem('notificationData' , JSON.stringify(pushData) ) ;
    // }
  }
 catch (err) {
    console.log('Push error happened:', err);
  }
});

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Ну, вы не можете получить доступ к локальному хранилищу или хранилищу сеансов от своего сервисного работника, потому что у него нет доступа к DOM.

Вы должны использовать CacheAPI

Или для сохранения данных и доступа к ним от работника службы и использования экземпляра окна:

IndexedDB

Это жизненный цикл вашего работника службы, к которому также может обращаться объект окна.

0 голосов
/ 24 апреля 2019

Переменная self, которую вы используете в своем коде, не определена по умолчанию.

Но из вашего кода вы, вероятно, ищете:

if(self.window.localStorage) {
  self.window.localStorage.setItem('notificationData' , JSON.stringify(pushData) ) ;
}

Таким образом, изменение используется self.window.localStorage вместо self.localStorage во второй строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...