Javascript 如何注册服务人员';s scope服务_worker.js所在目录上方的一个目录

Javascript 如何注册服务人员';s scope服务_worker.js所在目录上方的一个目录,javascript,scope,service-worker,Javascript,Scope,Service Worker,我的目录如下 public_html/ sw/ “sw/”是我想要放置所有服务人员的地方,但随后让这些服务人员在“public_html/”中具有所有文件的作用域 JS <script> if ('serviceWorker' in navigator) { navigator.serviceWorker.register('sw/notifications.js', { scope: '../sw/' }).then(function(reg) { // regist

我的目录如下

public_html/
sw/
“sw/”是我想要放置所有服务人员的地方,但随后让这些服务人员在“public_html/”中具有所有文件的作用域

JS

<script>
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('sw/notifications.js', { scope: '../sw/' }).then(function(reg) {
    // registration worked
    console.log('Registration succeeded. Scope is ' + reg.scope);
  }).catch(function(error) {
    // registration failed
    console.log('Registration failed with ' + error);
  });
};
</script>

if(导航器中的“serviceWorker”){
register('sw/notifications.js',{scope:'../sw/'}){
//注册成功了
console.log('注册成功。作用域为'+reg.Scope');
}).catch(函数(错误){
//注册失败
console.log('注册失败,出现'+错误);
});
};
如何允许这种范围?

编辑:如图所示,最大范围必须用加宽,以允许以下操作成功


将注册选项对象(navigator.serviceworner.register()的第二个参数)的
scope
属性更改为希望将服务工作者的作用域设置为的URL。在您的情况下,这可能是
。/public\u html

// ...
navigator.serviceWorker.register('sw/notifications.js', { scope: '../public_html/' })
// ...

如果未提供选项对象,或者没有
范围
属性,则该参数将默认为
/
(相对于ServiceWorker脚本)

此外,使用当前原点以外的任何原点设置
范围


参考资料:

这部电影。这意味着您不能在
作用域:'/public\u html/'
中注册一个位于
/sw/
的服务人员,除非您包含一个特殊的头
允许的服务人员
设置为服务人员的新最大作用域

总之,如果您可以在为服务工作者提供服务时添加此标头,请按如下所示进行设置:

Service-Worker-Allowed: /public_html/

如果没有,则必须将软件放置在作用域上方的某个位置。

这将引发一个错误,说明作用域超出了允许的作用域。你还需要根据另一个答案设置标题。对于像我一样寻找在哪里或如何添加此标题的任何其他迷失的灵魂,它需要添加到后端。在为service worker文件提供服务的web服务器上,如此人所示:这意味着您的service worker请求应如下所示: