0

我正在尝试实现以下功能

用户打开一个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);


    }
});
4

0 回答 0