我正在尝试实现以下功能
用户打开一个page 1
有一个button
. 单击button
另一个窗口打开但在该程序之前检查窗口是否已经打开,如果它已经打开,则重新打开现有窗口或打开新窗口。
在打开一个窗口时,我正在使用postMessage
.
现在,问题是当我打开一个窗口时(如果它尚未打开),有时窗口无法接收 postMessage 发送的消息,因此我在以下代码中使用了 setTimeout。
但是,这不是一个可靠的解决方案,所以我需要一种在新打开的窗口中每次都接收消息的方法。
以下是代码service worker
let matchingClient = null;
for (let i = 0; i < windowClients.length; i++) {
const windowClient = windowClients[i];
if (windowClient.url === urlToOpen) {
matchingClient = windowClient;
break;
}
}
if (matchingClient) {
// if window is already open then just focus on window
matchingClient.focus();
// post the message
channel.postMessage({action: event.action,information:event.notification.data ? event.notification.data.info : ""});
} else {
//if window is not open yet, then open a new window
clients.openWindow(urlToOpen);
//have used setTimeout because opening a window may take time , however this is just a workaround
setTimeout(function(){
console.log("Delayed");
//post the message
channel.postMessage({action: event.action,information:event.notification.data ? event.notification.data.info : ""});
},4000);
}
});