Как реализовать эффективную двустороннюю связь с сервисным работником и клиентской веб-страницей - PullRequest
0 голосов
/ 04 ноября 2018

Я хочу реализовать эффективную двустороннюю связь между работником службы и клиентской веб-страницей.

вот мой код

    function twoWayMsg() {
    if (navigator.serviceWorker.controller) {
        var messageChannel = new MessageChannel();
        messageChannel.port1.onmessage = function(event) {
            console.log("Response the SW : ", event.data.message);
        }

        console.log("Sendingage to the service worker");
        navigator.serviceWorker.controller.postMessage({
            "command": "twoWayCommunication",
            "message": "Hi, SW"
        }, [messageChannel.port2]);
    } else {
        console.log("Nove ServiceWorker");
    }
}

и

self.addEventListener('message', function(event) {
    var data = event.data;

    if (data.command == "twoWayCommunication") {
        console.log("Respondingessage from the Page: ", data.message);
        event.ports[0].postMessage({
            "message": "Hi, Page"
        });
    }
});

хорошо ли каждый раз создавать объект MessageChannel?

если я использую глобальную переменную для объекта канала сообщения, то получаю эту ошибку

 Failed to execute 'postMessage' on 'ServiceWorker': Port at index 0 is already neutered.
Error: Failed to execute 'postMessage' on 'ServiceWorker': Port at index 0 is already neutered.
...