Service Worker“安装”事件在 Firefox 上未触发(适用于 Chrome)

Kir*_*aar 6 javascript firefox service-worker

我开始了解服务工作者并创建了一个简单的测试者。它似乎在 Chrome 上可以正常注册、激活和工作,但在 Firefox 上却不行。

这是 sw.js (从我的根文件夹提供):

console.log("sw");

self.addEventListener("install", (event) => {
  self.skipWaiting();
  console.log("Installed!");
});

self.addEventListener("activate", function () {
  clients.claim();
  console.log("Activated!");
});

self.addEventListener("fetch", (event) => {
  console.log("fetch");
});

self.addEventListener("push", (event) => {
  console.log("push");
});

Run Code Online (Sandbox Code Playgroud)

我将其加载到入口点:

    if ("serviceWorker" in navigator) {
      window.addEventListener("load", () => {
        navigator.serviceWorker
          .register("/sw.js")
          .then((registration) => {
            console.log("SW registered: ", registration);
          })
          .catch((registrationError) => {
            console.log("SW registration failed: ", registrationError);
          });
      });
    }

Run Code Online (Sandbox Code Playgroud)

Chrome 控制台显示了我所期望的内容:

SW registered: >ServiceWorkerRegistration
    [...] 
    state: "activated"
    scope: "https://my.web.site/"
sw
Installed!
Activated!
fetch
fetch
Run Code Online (Sandbox Code Playgroud)

Firefox 控制台仅显示以下内容:

SW registered: >ServiceWorkerRegistration
    [...] 
    state: "activated"
    scope: "https://my.web.site/"

Run Code Online (Sandbox Code Playgroud)

我不明白为什么 Firefox 会注册服务工作线程,将其显示为在应用程序 > 服务工作线程中运行,但不触发安​​装/激活事件,也不拦截任何获取,即使在重新加载页面和/或关闭并重新打开页面之后也是如此。标签。

我从登录的 Gitpod 实例并通过 HTTPS 运行它(如果这有什么区别的话)。

小智 7

事实上,来自 Service Worker 的控制台消息不会显示在开发工具页面中。您可以在此页面中找到您的站点工作人员about:debugging#/runtime/this-firefox,然后单击“检查”以打开专用于特定服务工作人员的新开发工具。