postMessage, как только окно успешно загружается - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь реализовать следующую функцию

Пользователь открывает 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);


    }
});
...