Javascript 服务人员注册不返回
我有一个apache服务器正在运行。django支持后端,但将其放在apache服务器上。我有一个服务人员,在其他方面工作完全正常。这是进行注册的代码Javascript 服务人员注册不返回,javascript,django,service-worker,web-push,Javascript,Django,Service Worker,Web Push,我有一个apache服务器正在运行。django支持后端,但将其放在apache服务器上。我有一个服务人员,在其他方面工作完全正常。这是进行注册的代码 navigator.serviceWorker.register('/static/js/components/sw.js').then(function() { return navigator.serviceWorker.ready; })
navigator.serviceWorker.register('/static/js/components/sw.js').then(function() {
return navigator.serviceWorker.ready;
}).then(function(){console.log("success")})
但上面的代码不知何故从未给出任何响应。该承诺仍处于待定状态。
即使在末尾添加一个catch也不会产生任何错误。它会转到navigator.serviceworner.ready,但不会解析为then函数。我不确定是什么问题
我试过以下方法:
- 我认为问题可能是服务人员需要来自同一个来源,所以我添加了名为serviceworneralized:/static的标题,但这并没有完成工作
- 当我通过直接访问路径访问文件时,添加允许的服务人员:/static后,html被保存(例如:mywebsite/static/serviceworker.html),它工作正常。但是当我使用django映射的url(即我通过url.py映射的url,例如:mywebsite/admin/worker)访问同一个html文件时,它似乎不起作用
- 试图给出相对路径,但相对路径在我的情况下不起作用
- 我把它放在另一台apache服务器上,在那里它似乎工作得很好
我没有什么主意了。这是django的问题吗?我在这个链接中找到了上述问题的答案 唯一的问题是我通过url.py文件给出了sw.js文件的路径 基本上,这个想法是服务工作者注册要求工作者出现在同一个域中,比如 您在注册期间提供的域/路径 或者,如果您设置了一个允许的服务工作者:/path,则它将是 您在注册期间提供的域/路径/路径
因此,您需要进行适当的更改,以使您的服务人员可用。同样适用于您的问题。但它没有说明我所面临的问题。如果我使用绝对路径(mywebsite/service\u worker.html),那么它就可以正常工作。但是,如果我给出了我放在django url.py中的路径,并使用其他url(mywebsite/admin/worker/)访问相同的html,那么即使它是同一个文件,它也无法工作。两种情况下的范围应该相同,对吗?它将始终是/static/somedirectory。但是它不起作用。我从这篇文章中得到了答案