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