【发布时间】:2021-10-13 16:54:35
【问题描述】:
我们开发了一个 PWA,以便在离线时为我们的用户提供部分功能。我们使用 IndexedDB 和 Workbox 6.2.0 来缓存数据、静态资产和 API 调用,并在离线时通过 service worker 将它们提供给用户。
它在 Android 上运行得非常好;但在 iOS 上,它会间歇性地显示“Safari 无法打开页面”本机错误页面,而不是离线功能。在 iOS 14 上重新启动设备会修复它,并且所有缓存的数据仍然存在。在 iOS 15 上,我们不需要重新启动设备:通常会杀死所有选项卡,然后 Safari 就可以了,PWA 可以再次离线使用;有时在我们重新上线之前它不会起作用;其他时候,只要不理会它就会恢复生机。
当 PWA 出错时,使用 Safari 或 Chrome DevTools 绑定设备和调试 PWA 不会显示任何内容 - 它不会显示任何已注册的 service worker、缓存或 DB。
- 有一个离线后备页面配置为在用户尝试访问尚未缓存的资源时显示,因此this question 不适用。
- 与 this question 不同,如果我们重新连接到 Internet,PWA 就会恢复活力,然后它会再次离线工作。
- This question 表示该设备的可用存储空间可能不足,但我们的存储空间还剩 6GB。
- 我们知道 a bug in iOS 14 与我们看到的一致,但它应该在 iOS 15 中得到修复。
- 我们还知道there was a bug with
importScripts这意味着 Workbox 没有正确缓存,但现在也应该修复(我们使用importScripts从 Google 的 CDN 中提取 Workbox)
说实话,我已经没有关于如何诊断这个问题的想法了,更不用说修复了。有没有人遇到过这种情况,或者可以提出一种获取一些诊断数据的方法?
【问题讨论】:
-
鉴于这是非常特定于 iOS Safari 的,您是否在 bugs.webkit.org/enter_bug.cgi 提交了针对 Safari 的错误?希望 Apple 的工程团队知道需要什么样的调试信息,并能在这个问题上取得一些进展。
-
感谢@JeffPosnick 我这样做并发现了问题...查看答案。
标签: ios progressive-web-apps mobile-safari workbox