>

알림을 푸시하기 위해 firebase를 사용하고 있습니다. 백그라운드에서 알림을 받으면 데이터를 얻습니다. 이 데이터를 로컬 저장소에 저장하고 싶지만이 오류가 발생합니다

TypeError: Cannot read property 'setItem' of undefined

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);
  }
});

  • 답변 # 1

    와이즈 비즈  코드에서 사용하는 변수는 기본적으로 정의 된 것이 아닙니다.

    하지만 코드에서 다음을 찾고있을 것입니다 :

    self
    
    

    따라서 if(self.window.localStorage) { self.window.localStorage.setItem('notificationData' , JSON.stringify(pushData) ) ; } 를 사용하는 변화 self.window.localStorage 대신  두 번째 줄에서.

  • 답변 # 2

    글쎄, DOM에 액세스 할 수 없기 때문에 서비스 워커로부터 로컬 스토리지 또는 세션 스토리지에 액세스 할 수 없습니다.

    CacheAPI를 사용해야합니다

    데이터를 유지하고 서비스 워커 및 창 인스턴스에서 데이터에 액세스하려면 다음을 사용하십시오.

    IndexedDB

    서비스 직원의 수명주기에 있으며 창 개체를 통해 액세스 할 수도 있습니다.

    self.localStorage

  • 이전 CMD에서 파이썬을 실행할 때 numpy가 누락되었습니다 (아나콘다와 함께 설치된 파이썬)
  • 다음 html - Windows 로고 키 + 왼쪽/오른쪽 화살표를 사용하는지 여부에 따라 페이지에서 동일한 위치에 div를 유지하는 방법