首页 > 解决方案 > Workbox Service Worker - 忽略外部 URL 进行缓存?

问题描述

我有一个相当简单的服务工作者,它将缓存我的请求并使用StaleWhileRevalidate. 我有一些网址可以满足NetworkOnly我的需要。

workbox.routing.registerRoute('/login/*', new workbox.strategies.NetworkOnly());

我有一个在网站上展示广告所需的广告文件。我不希望它被缓存,所以我添加了一条新路线:

workbox.routing.registerRoute('https://s.nitropay.com/ads-757.js', new workbox.strategies.NetworkOnly());

但是,这会导致服务人员出现问题,无论我为此使用什么工作箱策略,都会导致错误:

Uncaught (in promise) no-response: no-response :: [{"url":"https://s.nitropay.com/ads-757.js"}]
    at Object.handle (https://storage.googleapis.com/workbox-cdn/releases/5.0.0/workbox-strategies.prod.js:1:1881)

这导致我在服务人员缓存页面后没有广告。

如何将此 URL 排除在服务工作者中?

pwabuilder-sw.js 文件:

// This is the service worker with the Cache-first network
const CACHE = "pwabuilder-precache";

importScripts('https://storage.googleapis.com/workbox-cdn/releases/5.0.0/workbox-sw.js');

self.addEventListener("message", (event) => {
  if (event.data && event.data.type === "SKIP_WAITING") {
    self.skipWaiting();
  }
});

workbox.routing.registerRoute('https://s.nitropay.com/ads-752.js', new workbox.strategies.NetworkOnly());
workbox.routing.registerRoute('/login/*', new workbox.strategies.NetworkOnly());
workbox.routing.registerRoute('/profile/*', new workbox.strategies.NetworkOnly());
workbox.routing.registerRoute('/logout.php', new workbox.strategies.NetworkOnly());
workbox.routing.registerRoute('/edit-deck/*', new workbox.strategies.NetworkOnly());
workbox.routing.registerRoute('/deckbuilder/*', new workbox.strategies.NetworkOnly());
workbox.routing.registerRoute(
  new RegExp('/*'),
  new workbox.strategies.StaleWhileRevalidate({
    cacheName: CACHE
  })
);

标签: progressive-web-appsservice-workerworkbox

解决方案


推荐阅读