我正在使用服务人员来处理后台通知。当我收到一条消息时,我正在Notification
使用self.registration.showNotification(title, { icon, body })
. 我正在使用self.addEventListener('notificationclick', ()=>{})
. 单击时,我正在检查是否有任何WindowClient
打开,如果打开,我将获取其中一个窗口客户端并调用postMessage
它以将数据从通知发送到应用程序以允许应用程序处理通知。如果没有我正在调用的打开窗口openWindow
,一旦完成,我将使用postMessage
.
event.waitUntil(
clients.matchAll({ type: 'window' }).then((windows) => {
if (windows.length > 0) {
const window = windows[0];
window.postMessage(_data);
window.focus();
return;
}
return clients.openWindow(this.origin).then((window) => {
window.postMessage(_data);
return;
});
})
);
我面临的问题是,postMessage
里面的电话openWindow
永远不会送达。我猜这是因为在页面完成加载之前发生的postMessage
调用WindowClient
,所以 eventListener 还没有注册来监听该消息?那正确吗?
如何从服务人员和 postMessage 打开一个新窗口到该新窗口。