在 Service Worker 的单个获取请求中仅获取 HTML

Get only HTML in single fetch request in service worker

我正在使用 Cloudflare service worker,我希望在每个请求中:

  1. 仅请求 HTML(因此仅计为 1 个请求)
  2. 在响应中搜索字符串
  3. 如果消息存在则清除该页面的缓存

我已经解决了第 2 点和第 3 点。完全不知道#1 是否可行。

我只需要一个请求,因为每天的免费请求数量有限制。否则我每页大约有 50-60 个请求。

我目前对 #1 的尝试,但效果不佳:

async function handleRequest(request) {
  const init = {
    headers: {
      'content-type': 'text/html;charset=UTF-8',
    },
  };
  const response = await fetch(request);
  await fetch(request.url, init).then(function(response) {
    response.text().then(function(text) {
    console.log(text);
})
  }).catch(function(err) {
      // There was an error
      console.warn('Something went wrong.', err);
    });
return response;
}
addEventListener('fetch', event => {
return event.respondWith(handleRequest(event.request))
});

您不能请求 "only the html",工作人员将根据任何与其部署的路线相匹配的请求采取行动。如果您只关心 html,您将需要设置您的工作路径以仅过滤到您想要 运行 工作人员所在的端点。

或者,您可以在每个请求上使用 worker,并且仅在响应 Content-Type 是您关心的类型时才执行您的逻辑。这将是这样的:

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
})

async function handleRequest(request) {
  let response = await fetch(request);

  let type = response.headers.get("Content-Type") || "";
  if (type.startsWith("text/")) {
    //this is where your custom logic goes
  }
  return response;
}