【问题标题】:Trigger event when serviceworker finished fetching new files?服务工作者完成获取新文件时触发事件?
【发布时间】:2020-06-09 15:04:06
【问题描述】:

Short:我想知道当serviceworker在更新后完成下载文件时是否可以触发某种事件或回调。

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

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

由于我的 PWA 经常在离线模式下使用,如果在用户关闭应用或失去互联网连接之前没有完成更新,那将是致命的,因为他可能会错过一些脚本或页面。 我想告诉用户,什么时候文件还在下载,或者至少什么时候文件下载完成了。

当服务人员完成下载内容时,是否会触发某种回调、钩子或其他什么? 或者也许是其他形式来实现这一点?

【问题讨论】:

    标签: angular service-worker angular8 progressive-web-apps angular-service-worker


    【解决方案1】:

    是的,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);
        });
      }
    }
    

    【讨论】:

    • 谢谢,我知道了。但那是在更新开始时调用的,不是吗?但是我正在寻找检测它的完成 - 或者更好 - 所有新文件的提取结束。
    • 您应该测试它是否适合您,但根据描述 available 应该在安装新的 Service Worker 并完成预缓存时触发。 “收到有关可用更新的通知。这些是刷新页面时要加载的应用程序的新版本。”
    • 经过一些初步测试,我认为您可能是对的。我会接受您的回答,如果我发现更多信息,请更新它。与此同时,另一个想法似乎正在整合这个:stackoverflow.com/a/49579418/3719922
    • 这似乎只表明有新版本可用。它似乎没有指示初始 serviceworker 和资产的加载何时完成。我真的很想在应用准备好离线使用时通知用户。
    猜你喜欢
    • 2019-01-04
    • 2021-06-17
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2020-09-12
    • 1970-01-01
    相关资源
    最近更新 更多