Javascript 如果使用fetch API,服务人员是否不提供内容?

Javascript 如果使用fetch API,服务人员是否不提供内容?,javascript,service-worker,Javascript,Service Worker,我已经创建了一个服务工作者,作为特定url的代理。 并希望为我的服务人员对该url的所有请求提供服务 例如: 文件 (异步()=>{ 试一试{ if(导航器中的“serviceWorker”){ const reg=wait navigator.serviceworner.register(“./sw.js”,{scope:“./my”}); console.log(“服务人员注册”); } }捕获(e){ 控制台错误(“服务工作人员注册失败”); 控制台错误(e); } })() 和sw.

我已经创建了一个服务工作者,作为特定url的代理。 并希望为我的服务人员对该url的所有请求提供服务

例如:


文件
(异步()=>{
试一试{
if(导航器中的“serviceWorker”){
const reg=wait navigator.serviceworner.register(“./sw.js”,{scope:“./my”});
console.log(“服务人员注册”);
}
}捕获(e){
控制台错误(“服务工作人员注册失败”);
控制台错误(e);
}
})()
和sw.js

self.addEventListener(“安装”,(e)=>{
console.log(“我的软件已安装”);
})
self.addEventListener(“fetch”,(e)=>{
constURL=新url(e.request.url).pathname;
console.log(url);
如果(url==“/my/hello”){
e、 响应(新响应(“hello world”{状态:200}));
}否则{
e、 respondWith(新的响应(“Hi-there,page-notfound”,{status:200}”);
}
})
当我们在某些服务器的帮助下在浏览器中运行此代码时。 如果我键入
http://127.0.0.1:8000/my/hello
在浏览器url中,它给我
hello world

现在回到
http://127.0.0.1:8000/
并从脚本或浏览器控制台发出提取请求

(异步()=>{
const res=wait fetch(“/my/hello”);
console.log(wait res.text())
})()
我找不到

Do fetch api将直接调用服务器和旁路服务工作程序?

否,如果您的服务工作程序已启动并正在运行,则
其范围内的所有请求将通过fetch事件处理程序,而不管它来自何处。
Scope
并不意味着该范围下的所有请求都将被拦截这意味着来自该范围的所有请求都将被拦截。

在您的情况下,您的
服务人员
范围在范围
/my/
下,这意味着在该范围下发起的所有请求都将被拦截

它不起作用的原因(当您从根目录点击url时)是您的范围不在该范围之内。如果要使其在这种情况下也能工作,请将service worker作用域更改为root,即
/
,或在注册时删除作用域属性


如果仍不清楚,请告诉我。

否,如果您的服务人员已启动并正在运行,则
其范围内的所有请求都将通过fetch事件处理程序,而不管它来自何处。
Scope
并不意味着该范围下的所有请求都将被拦截这意味着来自该范围的所有请求都将被拦截。

在您的情况下,您的
服务人员
范围在范围
/my/
下,这意味着在该范围下发起的所有请求都将被拦截

它不起作用的原因(当您从根目录点击url时)是您的范围不在该范围之内。如果要使其在这种情况下也能工作,请将service worker作用域更改为root,即
/
,或在注册时删除作用域属性

如果事情还不清楚,请告诉我