【发布时间】:2018-02-20 21:36:23
【问题描述】:
我正在尝试设置this example 并使其工作,但是在最简单的一个脚本文件和一个工作人员文件上它永远不会从服务工作人员向客户端发送消息。可能是什么问题?
浏览器:
谷歌浏览器 版本 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 位)
【问题讨论】:
-
您的服务人员可能还没有控制页面 - 尝试声明它和/或跳过等待它。
-
我试过了,但没用
-
@HenrikAndersson 我用它更新了 sw 代码
-
您是否尝试过使用
navigator.serviceWorker.controller.postMessage? -
但我想从服务人员向客户发送消息,而不是相反
标签: javascript service-worker postmessage