我无法存储来自 setBackgroundMessageHandler 的数据



我正在使用Firebase来推送通知。当我在后台收到通知时,我会得到数据。我想将此数据保存在本地存储中,但收到此错误

类型错误: 无法读取未定义的属性"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);
}
});

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

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

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

所以那里的变化是使用self.window.localStorage,而不是第二行中的self.localStorage

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

你应该使用 CacheAPI

或者,对于持久化数据并从服务工作进程和窗口实例访问它,请使用:

索引数据库

这位于服务工作进程的生命周期中,也可以由窗口对象访问。

相关内容

  • 没有找到相关文章

最新更新