在 Service Worker 的单个获取请求中仅获取 HTML
Get only HTML in single fetch request in service worker
我正在使用 Cloudflare service worker,我希望在每个请求中:
- 仅请求 HTML(因此仅计为 1 个请求)
- 在响应中搜索字符串
- 如果消息存在则清除该页面的缓存
我已经解决了第 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;
}
我正在使用 Cloudflare service worker,我希望在每个请求中:
- 仅请求 HTML(因此仅计为 1 个请求)
- 在响应中搜索字符串
- 如果消息存在则清除该页面的缓存
我已经解决了第 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;
}