gpt4 book ai didi

javascript - 为什么 Service Worker 的消息永远不会到达客户端

转载 作者:行者123 更新时间:2023-12-02 08:15:40 25 4
gpt4 key购买 nike

我正在尝试设置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 方法。

enter image description here enter image description here

这适用于Mozilla Firefox Quantum 58.0.2(64 位)

最佳答案

您必须首先获取客户端对象。将其添加到您的 fetch 监听器中。

self.clients.matchAll().then(function (clients){
clients.forEach(function(client){
client.postMessage({
msg: "Hey I just got a fetch from you!",
url: event.request.url
});
});
});

关于javascript - 为什么 Service Worker 的消息永远不会到达客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48894625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com