Я пытаюсь настроить этот пример и заставить его работать, однако, с одним самым простым файлом сценария и одним рабочим файлом, он никогда не отправляет сообщение клиенту от работника службы. В чем может быть проблема?
Браузер:
Google Chrome Версия 64.0.3282.167 (официальная сборка) (64-разрядная)
main.js
navigator.serviceWorker.addEventListener('message', event => {
console.log(event.data.msg, event.data.url);
});
navigator.serviceWorker.register("sw.js")
.then(function (registration) {
console.log("ServiceWorker registration successful with scope: ", registration.scope);
})
.catch(function (error) {
console.error("Service Worker Error", error);
});
sw.js
addEventListener('install', event => {
event.waitUntil(self.skipWaiting());
});
addEventListener('activate', event => {
event.waitUntil(self.clients.claim());
});
addEventListener('fetch', event => {
event.waitUntil(async function() {
// Exit early if we don't have access to the client.
// Eg, if it's cross-origin.
if (!event.clientId) return;
// Get the client.
const client = await clients.get(event.clientId);
// Exit early if we don't get the client.
// Eg, if it closed.
if (!client) return;
// Send a message to the client.
client.postMessage({
msg: "Hey I just got a fetch from you!",
url: event.request.url
});
}());
});
Я console.log
везде, и метод client.postMessage
вызывается.
Это работает в Mozilla Firefox Quantum 58.0.2 (64-разрядная версия)
navigator.serviceWorker.controller.postMessage
? - person Henrik Andersson   schedule 22.02.2018postMessage
- Метод postMessage () клиента позволяет работнику службы отправлять сообщение клиенту - person vardius   schedule 22.02.2018