Я пытаюсь реализовать следующую функцию
Пользователь открывает 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);
}
});