一个域两个 Service Worker

问题描述 投票:0回答:2

我有一个 Web 应用程序当前正在使用

AppCache
进行离线存储。我正在尝试将此应用程序转换为使用
Service Workers
来代替。我已使用 this source 作为我的
Service Worker
的基础,除了
Service Worker
是使用
PHP
构建的,以便动态生成要缓存的文件数组。

问题是,用户点击的第一个页面是登录页面,而现阶段我们对用户一无所知,因此我们不知道要缓存哪些资源。我通过两个清单解决了这个问题。一个清单用于

AppCache
页面,第二个清单由所有其他页面使用。当我转换为
Login
时,我有遵循相同模式的想法;有两个
Service Workers
- 一个用于登录页面,一个用于所有其他页面。
应用程序文件夹结构是这样的:

-- 共享 -- 页面 - 登录 -- 第1页 - 第2页 -- 第3页

登录页面和各个页面都使用

Service Workers

文件夹中的代码,因此两个

Shared
的范围都必须是应用程序的根目录。问题就在这里。我现在发现我只能在具有根范围的域上注册一个
Service Workers
。我可以在
Service Worker
页面上使用
Service Worker
范围注册第二个
Login
,但这将无法访问共享资源。如果我对登录页面和其他页面使用相同的
/Pages/Login
,则注册发生在登录页面上,并且生成的 url 列表不完整,因为它只包含登录使用的资源。
我很想知道是否有其他人处理过这个问题,并可以提出解决此问题的可能方向。

php service-worker html5-appcache
2个回答
1
投票
Service Worker

之外的 URL 资源(即响应

fetch
事件)。这包括“更高”级别的 URL,例如您的
scope
目录,或来自完全不同来源的 URL,例如 CDN。

/Shared

限制决定了给定的 Service Worker 是否可以

控制
给定 URL 的网页。 Service Worker 只能控制 URL 以 scope 作为前缀的网页。
因此,您可以创建多个 Service Worker,并使用与不同 URL 前缀匹配的 

scope

注册每个 Service Worker,并且它们每个都可以响应共享资源 URL 的

scope
事件。
更多信息请访问 

https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#scope_and_control


-1
投票

© www.soinside.com 2019 - 2024. All rights reserved.