You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单页应用Service Worker配置:Fetch事件失效排查及离线页面实现

你提供的代码参考(优化后)

Service Worker注册代码

<script>
  // ServiceWorker is a progressive technology. Ignore unsupported browsers
  if ("serviceWorker" in navigator) {
    navigator.serviceWorker
      .register("./src/sw.js", { scope: "/" }) // 新增作用域配置
      .then(function (registration) {
        console.log("Yay, service worker registered", registration);
      })
      .catch(function (err) {
        console.log("Noooo, sevice worker didnt register", err);
      });
  }
</script>

Service Worker文件代码

var precacheVersion = 22;
var precacheName = "precache-v" + precacheVersion;
// 补充离线页面依赖资源
var precacheFiles = ["/assets/offline.html", "/assets/offline.css"];

self.addEventListener("install", function (e) {
  console.log("[ServiceWorker] Installed");
  self.skipWaiting();

  e.waitUntil(
    caches.open(precacheName).then(function (cache) {
      console.log("[ServiceWorker] Precaching files");
      return cache.addAll(precacheFiles);
    })
  ); // end e.waitUntil
});

self.addEventListener("activate", function (e) {
  console.log("[ServiceWorker] Activated");

  e.waitUntil(
    caches.keys().then(function (cacheNames) {
      return Promise.all(
        cacheNames.map(function (thisCacheName) {
          if (
            thisCacheName.indexOf("precache") !== -1 &&
            thisCacheName !== precacheName
          ) {
            console.log(
              "[ServiceWorker] Removing cached files from old cache - ",
              thisCacheName
            );
            return caches.delete(thisCacheName);
          }
        })
      );
    })
  ); // end e.waitUntil
});

self.addEventListener("fetch", function (e) {
  console.log("[ServiceWorker] Fetch event for ", e.request.url); // 补充打印请求URL,方便调试
  e.respondWith(
    caches.match(e.request).then(function (cacheResponse) {
      if (cacheResponse) {
        console.log("Found in cache!");
        return cacheResponse;
      }
      return fetch(e.request)
        .then(function (fetchResponse) {
          return fetchResponse;
        })
        .catch(function (err) {
          var isHTMLPage =
            e.request.method == "GET" &&
            e.request.headers.get("accept").includes("text/html");
          if (isHTMLPage) {
            return caches.match("/assets/offline.html");
          }
        });
    })
  );
});

内容的提问来源于stack exchange,提问作者stickmanjones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:05:58