当前位置: 首页 > 知识库问答 >
问题:

渐进式web应用程序:更新软件。单页应用程序上的js

司空海荣
2023-03-14

因此,我们正在构建一个进步的web应用程序,当然,我们正在使用令人敬畏的服务人员。

每当我们发布新版本的应用程序时,我们都会更新软件中的版本号。js文件。页面加载时,浏览器会检测到sw。js已更改并触发“安装”和“激活”事件,这反过来会缓存适当的资源以供脱机使用。

这工作很棒。但是从我的理解来看,它只会在页面加载时被触发。因此,如果用户将应用程序添加到他们的主屏幕上,并且总是使用此快捷方式访问应用程序,则不会经常触发“刷新”事件,因此这些用户不会像使用非SPA网络应用程序那样频繁地看到更新。

所以,我的问题是,您将如何更新使用sw的单页渐进式Web应用程序。js作为一个更新过程?

我想到了几种解决方案,其中包括一个超时,可以查询服务器以搜索新版本,并将其与本地版本进行比较等。但这似乎有点奇怪。。

共有1个答案

乐正育
2023-03-14

正在检查sw的新版本。js在每次向服务人员范围内的页面发出导航请求时发生。因此,如果SPA无限期地保持开放状态,并且没有“真正的”导航发生,则不会对sw进行任何检查,这是正确的。js更新。

大多数浏览器最终都会从内存中卸载背景页面,然后在您将它们返回前台时重新加载它们,这在一定程度上缓解了这种情况。但这不是一件你可以信赖的决定性的事情。

您可以使用ServiceWorkerRegistration.update()方法强制浏览器检查对sw.js的更新,就像有导航一样。

由您决定多久调用一次该方法。如果你想将你得到的行为与“真实”导航相匹配,你可以做以下事情:

function spaNavigate(url) {
  // Do what you'd normally do to update page content,
  // use the History API to change the location to `url`, etc.

  // Then, force a service worker update check:
  if ('serviceWorker' in navigator) {
    navigator.serviceWorker.ready.then(function(registration) {
      registration.update();
    });
  }
}
 类似资料:
  • 问题内容: 今天在这里提出了一个问题,我没有明显的答案。 假设我们串联并缩小所有资源文件(CSS和Javascript),并在“母版页”中声明它们。 在多页应用程序上,如果CSS文件发生更改,它将在下一次整页加载时重新充电。 在单页应用程序上,用户可以继续工作数天,并且永远不会为声明CSS文件的主页充值。在发出Ctrl-F5之前,用户永远看不到更改。 我确定有人已经想到了这一点,并且有经验可以分享

  • 有多种方法可以更新Electron应用. 最简单并且获得官方支持的方法是利用内置的Squirrel框架和Electron的autoUpdater模块。 Updating Applications There are several ways to update an Electron application. The easiest and officially supported one is

  • 有多种方法可以更新Electron应用. 最简单并且获得官方支持的方法是利用内置的Squirrel框架和Electron的autoUpdater模块。 使用 update.electronjs.org Electron 团队维护 update.electronjs.org,一个免费开源的网络服务,可以让 Electron 应用使用自动更新。 这个服务是设计给那些满足以下标准的 Electron 应

  • 我已经通过谷歌页面上的指南直接创建了一个TWA Progressive Web应用程序: https://developers.google.com/web/updates/2019/02/using-twa 并在应用程序和AssetLink中添加了资产报表。我的两个域名上的json与谷歌网站上的描述完全相同 打开应用程序时,不会显示应用程序URL栏。然而,如果我点击一个链接进入我的第二个域名,就

  • 当渐进式web应用程序(带有service worker)显示通知时,通知抽屉中显示的通知具有我提供的图标,看起来很好。 有没有办法让PWA指定状态栏中显示的图标?

  • 我已经成功地为我的网站创建了一个PWA,但当我将它添加到主屏幕并打开应用程序后,闪屏上的图标仍然非常小。 谢谢!