有没有办法在 iOS 上自动更新(或只是清除缓存)PWA?

2024-03-02

我一直在 iOS 上努力尝试一些在 Android 上可以轻松运行的东西:让我的 PWA 在有新版本时自动更新。我根本不确定这在 iOS 上是否可行。我使用 vue.js 和 Quasar 来构建我的应用程序,一切都可以在 Android 上开箱即用。这是目前 iOS 版本的(丑陋、可怕的)情况:

  1. 我可以检查我自己的服务器的版本,并将其与我的应用程序中存储的当前版本(在indexedDB中)进行比较,并发出有新版本的通知。到目前为止,一切都很好。
  2. 除了让用户手动清除 SAFARI 缓存(!!)之外,我无法弄清楚如何以编程方式从应用程序内清除 PWA 缓存或以其他方式强制上传。

所以此时我想我的问题是:

  1. 有没有人能够在 iOS(11.3 或更高版本)上获得 PWA,以便在新版本可用时自动更新?
  2. 有没有办法从我的 PWA 中清除(Safari)应用程序缓存?

显然,通知用户为了更新,他们必须在应用程序之外执行几个步骤才能刷新它,这是一种非常糟糕的用户体验,但似乎这就是 iOS 目前的情况,除非我遗漏了一些东西。有没有人在任何地方完成这项工作?


经过一周又一周的搜索,我终于找到了解决方案:

  1. 我在服务器上添加了版本字符串检查,并将其返回到应用程序,如上所述。

  2. 我在 localtstorage (IndexedDB) 中查找它,如果找不到,我会添加它。如果我找到它,我会比较版本,如果服务器上有更新的版本,我会弹出一个对话框。

  3. 关闭此对话框(我的按钮标记为“更新”)运行window.location.reload(true)然后将新的版本字符串存储在本地存储中

瞧!我的应用程序已更新!我不敢相信事情竟然如此简单,我在任何地方都找不到解决方案。希望这对其他人有帮助!

2019 年 9 月更新:

上述技术存在一些问题,特别是它绕过了 PWA 服务工作机制,并且有时重新加载不会立即加载新内容(因为当前的软件不会释放页面)。我现在有一个新的解决方案,似乎适用于所有平台:

function forceSWupdate() {
  if ('serviceWorker' in navigator) {
    navigator.serviceWorker.getRegistrations().then(function (registrations) {
      for (let registration of registrations) {
        registration.update()
      }
    })
  }
}
forceSWupdate()

在我的服务人员内部,如果有更新,我现在会抛出对话框,然后执行我的操作location.reload(true)从那里。这总是会导致我的应用程序立即刷新(我添加了重要的警告skipWaiting and clientsClaim我的注册指令)。

这在每个平台上都是一样的,我可以以编程方式检查更新或等待服务工作人员自行完成(尽管它检查的时间因平台、设备和其他不可知因素而异。通常不超过 24不过几个小时。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在 iOS 上自动更新(或只是清除缓存)PWA? 的相关文章

随机推荐

  • Tomcat 7 SSL 失败

    我使用 Tomcat 7 并将启用 SSL 连接器 实际上我已经将此解决方案编辑为server xml file
  • QtRuby 可以与 Qt 5 一起使用吗?

    我可以在网上找到的所有内容QtRuby https duckduckgo com q ruby and qt使用 Qt 4 但当前的 Qt 版本是 5 这是否只是文档跟不上现实的问题 Qt 5 可以与 QtRuby 一起正常工作 如果您断言
  • Windows Phone 运行时没有页面转换

    我正在尝试禁用 Windows Phone 运行时的默认页面导航动画 我所能实现的就是将其更改为连续体 十字转门或幻灯片 但我希望页面能够立即更改 因此 当我调用 this Frame navigate 时 它应该导航到新页面 而无需任何动
  • 从 Windows 上下文菜单接收参数

    我以前做过这个 但我一生都不记得该怎么做 在我的资源管理器上下文菜单中 我添加了一个新条目 转到 regedit 转到 HKEY CLASSES ROOT bla bla bla 现在 当我单击我的选项时 我想传递文件路径 文件名等我的应用
  • 如何从服务 C# 捕获控制台输出?

    我们有一个部署到远程客户系统的 C 服务 应用程序将大量 诊断 信息写入控制台 即 Console WriteLine 该服务没有 做它应该做的事 我们如何捕获另一个应用程序中服务的控制台输出 WinForm 版本的应用程序可以在客户位置加
  • Gradle Jacoco 和 JUnit5

    我们刚刚将单元测试移植到 JUnit5 意识到这仍然是相当早期的采用 谷歌上几乎没有任何提示 最具挑战性的是为我们在 jenkins 上使用的 Junit5 测试获取 jacoco 代码覆盖率 因为这花了我几乎一天的时间才弄清楚 所以我想我
  • 注册为 Spring bean 时过滤器调用两次

    我想用 Autowire with a Filter 所以我在中定义我的过滤器SecurityConfig如下 Override protected void configure HttpSecurity http throws Excep
  • 如何在页面之间共享信息

    在开始之前 正如标题中所述 我正在学习 NET MAUI 而且我对此还很陌生 我的问题是我找不到从一个页面到上一个页面共享信息的方法 我想做的是 在 MainPage 中 有一个按钮 按下后会将用户发送到另一个页面 我们将其称为 Login
  • :为什么我无法设置Xamarin.Forms.ListView的SelectedItem属性?

    object lastItem null foreach object item in listView ItemsSource lastItem item if lastItem null listView SelectedItem la
  • 获取文件的最后修改日期/时间作为本地日期/时间字符串

    new File url lastModified 返回一个long等于自纪元以来的毫秒数 基于 GMT 将其转换为一个简单的方法是什么String代表系统本地日期 时间 如果你真的需要看到我的尝试 那就是 但这是一团糟 而且无论如何都是错
  • 如何从 Rails 内部重新启动 Rails?

    好的 所以我想在 Rails 中创建一个操作来重新启动自身 我做了一些搜索并发现 http snippets dzone com posts show 5002 http snippets dzone com posts show 5002
  • 无法从 Metro 风格应用程序获取可用磁盘空间

    我正在编写一个 Metro 风格的应用程序 想要确定托管用户音乐库的驱动器的可用存储容量 我想在磁盘上没有剩余空间或剩余空间很少的情况下禁用某些应用程序功能 我使用 P Invoke 调用 GetDiskFreeSpaceExW 并收到错误
  • 如何计算(A*B)%C? [复制]

    这个问题在这里已经有答案了 有人可以帮我如何计算吗 A B C where 1 lt A B C lt 10 18在C 中 没有big num 只是一种数学方法 从我的脑海中浮现出来 未经广泛测试 typedef unsigned long
  • 应如何聚合公开子实体的信息?

    从这个问题跟进实体是否应该有方法 如果有 如何防止它们在聚合之外被调用 https stackoverflow com questions 51907447 should entity have methods and if so how
  • 从 GNU Octave 中的矩阵中删除一列

    在 GNU Octave 中 我希望能够从矩阵中删除特定的列 为了一般性 我还希望能够从矩阵中删除特定行 假设我有这个 mymatrix eye 5 mymatrix Diagonal Matrix 1 0 0 0 0 0 1 0 0 0
  • 合并 Pig 中的两行

    我想为下面的查询编写一个猪脚本 输入是 ABC DEF GHI JKL MNO PQR STU VWX 输出应该是 ABC DEF GHI JKL MNO PQR STU VWX 有人可以帮我吗 使用土猪很难解决这个问题 一种选择是下载da
  • (量角器)检查单击时是否禁用输入?

    我有两个输入字段 用户名和密码以及一个微调按钮 当我单击此微调按钮时 这两个输入字段将被禁用 并且我将被重定向到另一个页面 我正在编写一个端到端测试来检查这些输入字段是否被禁用 element by model username sendK
  • 如何按不同时区的年月日进行聚合

    我有一个 MongoDB 它以 UTC 格式存储日期对象 好吧 我想按不同时区 CET 的年 月 日执行聚合 这样做对于 UTC 来说效果很好 BasicDBObject group id new BasicDBObject id new
  • 为什么 Big Query 远程函数无法激活超过 60 个云函数实例?

    我已经开始使用远程功能 https cloud google com bigquery docs reference standard sql remote functions https cloud google com bigquery
  • 有没有办法在 iOS 上自动更新(或只是清除缓存)PWA?

    我一直在 iOS 上努力尝试一些在 Android 上可以轻松运行的东西 让我的 PWA 在有新版本时自动更新 我根本不确定这在 iOS 上是否可行 我使用 vue js 和 Quasar 来构建我的应用程序 一切都可以在 Android