当 serviceworker 完成获取新文件时触发事件?

Trigger event when serviceworker finished fetching new files?

: 不知道是否可以在serviceworker更新完成下载文件时触发某种事件或回调

长版:我有一个使用 angular(8) 及其 angular serviceworker 的 PWA。在 ngsw 配置中,我将安装和更新模式设置为预取。

通常,当更新被推送到服务器时,应用程序注册到更新事件并且 serviceworker 开始下载新文件(.js、资产、.html 等)。我可以在控制台的网络选项卡中看到新文件是如何一个一个地下载的。但是,由于它是一个大型应用程序,这可能需要几分钟时间。

由于我的 PWA 在离线模式下使用很多,如果在用户关闭应用程序或失去互联网连接之前未完成更新是致命的,因为他可能会错过一些脚本或页面。 我想告诉用户,文件仍在下载中或至少文件下载完成时。

当 serviceworker 完成下载内容时,是否有某种回调、挂钩或任何触发的东西? 或者也许其他一些形式来实现这个?

是的,Angular 提供了一个 SwUpdate service 您可以订阅。它的用法如下所示:

@Injectable()
export class LogUpdateService {

  constructor(updates: SwUpdate) {
    updates.available.subscribe(event => {
      console.log('current version is', event.current);
      console.log('available version is', event.available);
    });
    updates.activated.subscribe(event => {
      console.log('old version was', event.previous);
      console.log('new version is', event.current);
    });
  }
}