2

我有一个 apache 服务器正在运行。这样的后端由 django 支持,但放置在 apache 服务器上。我有一个服务人员,否则它工作得很好。这是进行注册的代码

navigator.serviceWorker.register('/static/js/components/sw.js').then(function() {
                            return navigator.serviceWorker.ready;
                        }).then(function(){console.log("success")})

但是上面的代码不知何故从未给出任何响应。承诺仍处于待处理状态。即使在最后添加一个 catch 也不会产生任何错误。它转到 navigator.serviceworker.ready 但不解析为 then 函数。我不确定是什么问题。

我试过以下东西:

  • 我虽然问题可能是服务工作者需要在同一个来源,所以我添加了名为 Service-Worker-Allowed:/static 的标题,但这并没有完成这项工作。

  • 当我通过直接转到路径访问文件时,在添加Service-Worker-Allowed:/static 后保存了 html(例如:mywebsite/static/serviceworker.html):/static 它工作正常。但是当我使用 django 映射的 url(即我通过 urls.py 映射的 url,例如: mywebsite/admin/worker )访问同一个 html 文件时,它似乎不起作用。

  • 试图给出相对路径,但相对路径在我的情况下不起作用。

  • 我把它放在另一个 apache 服务器上,它似乎工作正常。

我没有任何想法。这是一些django问题吗?

4

1 回答 1

0

我在此链接中得到了上述问题的答案, 在 Django 中使用 chrome 实现推送通知 唯一的事情是我通过 urls.py 文件给出了 sw.js 文件的路径。

基本上这个想法是服务工作者注册要求工作者存在于同一个域中,比如

yourdomain/path_which_you_gave_during_registration

或者如果您设置了Service-Worker-Allowed: /path那么它将是

yourdomain/path/path_which_you_gave_during_registration

因此,您需要进行适当的更改以使您的服务人员可用。

于 2016-03-29T05:53:06.787 回答