以下是我的fcm setBackgroundMessageHandler
功能:
messaging.setBackgroundMessageHandler(function(payload) {
console.log('[firebase-messaging-sw.js] Received background message ', payload);
// Customize notification here
const notificationTitle = 'Background Message Title';
const notificationOptions = {
body: 'Background Message body.',
icon: '/firebase-logo.png'
};
var event = new CustomEvent("name-of-event", payload);
// Dispatch/Trigger/Fire the event
document.dispatchEvent(event);
return self.registration.showNotification(notificationTitle,
notificationOptions);
});
我无法在上述方法中访问document
。我试图在全局变量中保存文档并在上面的方法中访问它,但它不起作用。
var document = document;
.
.
.
document.dispatchEvent(event); // gives error: dispatchEvent of undefined
答案 0 :(得分:1)
由于服务工作者无法访问document
。因此无法使用其dispatchEvent
函数向主页发送事件。
要将服务工作人员的邮件发送至Main page
,我们可以使用BroadcastChannel
。在Main页面中创建一个这样的监听器:
var listener = new BroadcastChannel('listener');
listener.onmessage = function(e) {
console.log('Got message from service worker',e);
};
在service worker js
文件中使用BroadcastChannel
的{{1}}功能向主页发送消息:
postMessage