我无法存储来自setBackgroundMessageHandler的数据

时间:2019-04-24 13:37:14

标签: javascript angular firebase firebase-cloud-messaging

我正在使用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 :(得分:0)

您在代码中使用的self变量不是默认定义的。

但是从您的代码中,您可能正在寻找:

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

因此更改使用的是self.window.localStorage,而不是第二行的self.localStorage

答案 1 :(得分:0)

好吧,您无法从服务工作者访问本地存储或会话存储,因为它无法访问DOM。

您应该使用CacheAPI

或者为了持久保存数据并从服务工作者和窗口实例访问数据,请使用:

IndexedDB

这在服务人员的生活中,也可以由window对象访问。