0

在使用 Workbox webpack 插件创建我的服务工作者时,我将两者都设置skipWaitingclientsClaimtrue。在第一个初始加载时,没有先前的服务工作者运行,我看到我所有的预缓存资源都被初始登录页面上的 sw 加载(大概是放入缓存中)。我们会说a.js,这些资源之一确实在网络选项卡中显示为在这些资源中加载。

然后,我浏览到我的网络应用程序的一个新部分,该部分使用a.js,我确实a.js在网络选项卡中看到了负载,但不是来自服务工作者;它像往常一样从网络加载。似乎在第一次初始加载时,软件正在运行并缓存资源,但没有从缓存中提供服务。这是预期的行为吗?

需要明确的是,如果我清除所有服务工作者,然后再次浏览到登录页面,然后刷新并重新加载登录页面,然后浏览到其他部分,我确实可以看到a.js来自缓存的负载,来自服务工作者。所以看起来服务工作者的初始安装并没有导致它完全活跃。

这是预期的,如果不是,有没有办法解决这个问题?

4

1 回答 1

1

如果您正在使用clientsClaim并且处于全新的场景中,则在 service worker 完成安装/激活后,所有网络请求都应该触发 service worker 的fetch处理程序。因此,您所看到的与我的预期不符。

您可以在 Workbox 中启用调试,并查看在您建议的场景中是否记录了任何有用的信息。特别是,请确保预缓存步骤已完成,并且在您提出a.js请求时服务工作者已完全激活。

您还可以查看当前活动服务人员的受控客户端列表,并确认您打开的新选项卡在列表中:

在此处输入图像描述

于 2018-08-07T01:27:20.090 回答