首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检测到的服务工作者新版本不调用skipWaiting()

检测到的服务工作者新版本不调用skipWaiting()
EN

Stack Overflow用户
提问于 2022-08-12 15:07:20
回答 1查看 121关注 0票数 0

描述

在Web应用程序中,我们将service-worker用于以下几个任务:

  1. PWA
  2. 网络推送
  3. 检测新版本何时发布,如果是,则重新加载到最新版本。

我们决定删除Web推送功能,这将导致服务工作者拥有一个新版本。

这是提交提交

代码语言:javascript
运行
复制
    self.skipWaiting()
  }
})
-
- // This will add batch sdk service worker
- self.importScripts(process.env.PUBLIC_URL + '/batchsdk-shared-worker.js')

出于某种原因,我们从未经历过称为skipWaiting()https://github.com/pass-culture/pass-culture-app-native/blob/master/src/service-worker.ts#L76的事件。

代码语言:javascript
运行
复制
// This allows the web app to trigger skipWaiting via
// registration.waiting.postMessage({type: 'SKIP_WAITING'})
self.addEventListener('message', (event) => {
  if (event.data && event.data.type === 'SKIP_WAITING') {
    self.skipWaiting()
  }
})

这是我们的应用程序检测新版本时的状态。

如果我在developer选项卡中单击skipWaiting,则更新将正常执行。

预期结果

在新的发行版上:

  1. 不更改服务工作人员的应用程序:事件被调用,我们调用self.skipWaiting()
  2. 它还应该调用skipWaiting()

实际效果

(1)工作正常,但是,当我们在(2)中调用skipWaiting()时,新版本的服务工作人员的发布将检测到更新,但从不调用skipWaiting()

问题

对于新的服务工作人员版本,我们如何调用skipWaiting()来自动更新服务工作者?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-17 14:56:07

当一个新的应用程序发布时,新的服务工作者会自动检测到新的webapp,但是它不会安装这个程序,为此,您必须调用sw.skipWaiting(),要么自动调用,要么使用按钮。

这与服务工作人员中的下列代码一起工作:

代码语言:javascript
运行
复制
self.addEventListener('message', (event) => {
  if (event.data && event.data.type === 'SKIP_WAITING') {
    self.skipWaiting()
  }
})

但是,只有当应用程序的块发生变化时,它才能工作。如果服务工作者(以及它的新版本,而不是webapp)发生修改,则不会触发此事件。通过在我们的服务工作者中添加以下内容,我设法解决了这个问题:

代码语言:javascript
运行
复制
self.addEventListener('install', () => {
  self.skipWaiting()
})

新的服务工作者需要安装并因此发出一个install事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73336202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档