PWA 仅在 Chrome 桌面上运行?

PWA only runs in Chrome on Desktop?

创建了一个简单的 PWA,制作了清单文件和服务工作者,它在我的 iMac 上的 Chrome 中运行良好。查看控制台,我可以看到 Service Worker 已注册并且 运行ning 并且它可以识别清单文件。模拟网络丢失,它仍然 运行 就像它应该的那样。还好吧?

当我通过 HTTPS 提供它时,它在 phone 上的浏览​​器中打开时很好,并按应有的方式添加到主屏幕,但是当我尝试从图标 运行 它时在主屏幕上,我得到的只是一个空白的白色屏幕。

如果我删除该图标,然后通过 HTTP 连接提供它并将其保存到主屏幕,它会按照应有的方式执行所有操作,运行s 来自您放置在主屏幕上的图标 (当从 http 完成时)但当然不会 运行 离线。

我做错了什么?甚至不确定从哪里开始寻找!

问题可能出在您的 PWA 和 API 服务器之间的 HTTPS 请求的 CROS 访问来源。我的 PWA 也有同样的问题。它在 chrome 或桌面上运行良好,并且 运行 我第一次在移动 chrome 中打开它时运行良好,但是当服务工作者注册它时 return CROS 访问来源。 要调试此问题,我建议在您的移动设备上使用 chrome inspect。 你可以找到指南 here

检查

Access-Control-Allow-Origin

在 API 和 PWA 服务器之间。 您必须允许您的 PWA URL 访问 API 服务器。您可以使用 PWA URL 或 * 访问所有 URLs.

检查

Access-Control-Allow-Headers

在您的 API 服务器中。 如果您要在请求中发送身份验证或 cache-control header,则必须将它们添加到 Access-Control-Allow-Headers.

并且您的 PWA 和 API URL 必须具有有效的 SSL 证书。

另外,在 manifest.json

中检查 start_url

您必须在 start_url 中设置完整的 URL 包括协议,index.html 不是必需的。