我有一个 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 列表不完整,因为它只包含登录使用的资源。我很想知道是否有其他人处理过这个问题,并可以提出解决此问题的可能方向。
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