progressive-web-apps - 为什么基于 Workbox 的 PWA 在 iOS 12 上从主屏幕启动时会产生错误?
问题描述
清除数据后,我可以在浏览器中运行该应用程序,但如果我随后将其添加到主屏幕并尝试从那里重新启动,我会得到一个显示以下错误的普通页面:
Safari cannot open the page. The error was: "FetchEvent.respondWith received an error: Returned response is null."
随后在浏览器中启动也会给出该错误。我必须再次在浏览器中“清除数据”才能让它再次工作。
我正在使用 Workbox v3.6.2(在撰写本文时是最新版本),并且我的 iPhone 运行的是 iOS 12。
这看起来很可疑,但我有点过头了(好吧,无论如何,解决方法是)。这让我想再次尝试降级到 iOS11.X,和/或安装 Technology Preview 59。
解决方案
看起来这个错误有多种可能的原因 - 我已经遇到过两次了;
情况 1:需要添加 ROOT 证书并在设备上将其设置为受信任。
我的条件;
从本地服务器加载 pwapp 时,我在装有 iOS 12 的 iPhone 5s 上遇到了同样的错误。
在服务器的开发机器上使用自签名证书。
不使用工作箱。
如果使用来自 iOS 认可的证书颁发机构的 ssl 证书从提供商托管的服务器加载 pwapp,则不会出现问题。
原来这与安全证书有关 - (不使用 Mac,因此无法调试到设备上的网络/安全问题级别/直接进行全面诊断)。
修复是;
- 创建一个自签名根证书并将其用于我的服务器。
- 将根证书 .pem 文件转换(副本)为 .der
- 通过设备上的 safari 访问 .der / 添加配置文件,设置为受信任。
(正确的方法是做根证书、中介证书和服务器证书,使用服务器证书并通过 url 提供根证书或将其通过电子邮件发送到设备上的电子邮件客户端。)
有用的链接;
请参阅在 General->About->Certificate Trust Settings 中获取证书
情况 2:当您可以访问服务器时,您必须至少从主屏幕图标访问 pwapp 一次。
重现; (联网)
从主屏幕删除图标并清除 Safari 历史记录和网站数据
访问 pwapp 网址
添加到主屏幕但不启动
关闭网络
尝试从主屏幕启动 => 得到错误
打开网络,从主屏幕启动 pwapp => 好的。
关闭 pwapp,关闭网络,从主屏幕启动 pwapp => 好的。
所以看起来像一个 iOS/Safari/Webkit 错误
推荐阅读
- c++ - 从类模板继承所需的 iostream
- java - Java中的yaml生成
- javascript - 根据屏幕尺寸缩放多个元素
- amazon-web-services - AmazonSQSException:参数 Condition 的值 aws:arn 必须来自全局上下文键列表
- c# - 使用最小起订量的扩展方法的单元测试
- java - SQLiteAssetHelper 中缺少数据库错误
- node.js - 如何在 node.js/discord.js 中的字符串中输入变量?
- typescript - 我可以减少我的 redux 代码中的打字稿样板重复吗?
- javascript - NodeJS 应用程序在多次请求后崩溃
- laravel - 有什么方法可以显示来自 api 的数据吗?