Yog*_*dra 16 javascript service-worker progressive-web-apps
我有两个子域名:https://abc.xxxx.com和https://xyz.xxxx.com.所以我的问题:
1).是否可以从https://abc.xxxx.com注册https://xyz.xxxx.com的服务工作者 ?如果是的话怎么样?
2).如果http://abc.xxxx.com(http不安全),那么无论如何从http://abc.xxxx.com注册https://xyz.xxxx.com的服务工作者,如在iframe或其他什么....
这是一个真实的情况,我正面临着我的多个子域.任何帮助赞赏.提前致谢.
Jef*_*ick 16
以下是一些一般性答案,我认为应该解决您在问题中提出的各种观点:
每个注册的服务工作者都有一个关联scope,它指示服务工作者可以控制的一组网页.该scope服务工作者是一个URL,该URL必须具有相同的起源作为注册服务人员的页面,而且必须是对应于相同的路径级别的页面,或者是一个或多个级别的路径的URL下.默认值scope对应于与服务工作者脚本的位置相同的路径级别.由于此限制,无法navigator.serviceWorker.register(...)从一个(子)域上的页面调用,最终得到控制另一个(子)域上的页面的服务工作者.
有一些限制可以防止您https: <iframe>在http:页面上抛出并使用它来注册服务工作者.在https iframe中注册服务工作程序时,请参阅DOMException
虽然我不知道它与您的问题直接相关,但明确要求服务工作者代码中fetch()的http:资源会导致当前版本的Chrome出现故障,因为fetch()服务工作者不允许使用混合内容.我不知道事情是否100%在这方面确定,这个开放的bug仍然是相关的.
如果您的页面同时存在abc.123.com并且xyz.123.com您希望两组页面都由服务工作者控制,那么您需要有两个单独的服务工作者注册.每个注册都需要一份服务工作者JS文件的副本,该文件托管在与顶级页面相对应的相应域中,并且需要通过所有页面和服务工作者脚本进行访问https:.
话虽这么说,您可以通过<iframe>在页面上包含跨域,但主页和<iframe>需要通过服务来启动不同域的服务工作者注册https:.正常的服务工作者范围限制适用,因此,例如,如果要为覆盖整个https://other-domain.com/范围的其他域注册服务工作者,则需要确保要注册的服务工作者脚本的位置位于顶级的,例如https://other-domain.com/service-worker.js,不是https://other-domain.com/path/to/service-worker.js.这是通过元素的AMP项目使用的方法 .<amp-install-serviceworker>
Service Worker scripts must be hosted at the same origin (Protocol + Domain name + Port).每个子域被认为是一个不同的来源,因此,您将需要为每个子域注册一个服务工作者。这些工人中的每个人都有自己的职责cache和职责scope。
| 归档时间: |
|
| 查看次数: |
8246 次 |
| 最近记录: |