首页 > 解决方案 > Safari IOS 13.1.2 上的特殊 PWA 错误

问题描述

我不知道这是否特定于 IOS 13 的最新更新,但我有一些非常奇怪的 PWA 行为。当我最初将它添加到我的主屏幕时,页面上的链接在 safari 中打开,而不是在 PWA 上内联(顺便说一下,没有一个链接设置为 __blank),但是当我在 safari 上使用 oAuth 登录然后将其添加到我的主屏幕,它的功能应有尽有,并且可以正常使用链接。(目前使用带有 Node 和 Express 的 Passport 进行身份验证)我不知道是否有一些安全基础设施或与数据包有关的东西,但这真的很奇怪,我想在我的用户群感到沮丧之前尽快解决这个问题.

我试过查看我的清单,但就 PWA 标准而言,一切都符合规范。我将显示设置为独立,我的所有标签设置正确,Lighthouse 审核也说它应该可以工作。我查看了护照文件,追踪了我的身份验证码,但似乎没有任何效果。

标签: redirectsafariprogressive-web-appsios13

解决方案


看起来 Apple 在 iOS 13 中更改了主屏幕/独立网络应用程序的行为,但我找不到任何官方文档。现在看来,如果在将 Web 应用程序添加到主屏幕之前没有设置 manifest.json ,它只会将初始页面视为独立视图的范围。因此,任何其他链接/重定向都会在另一个窗口或应用内浏览器中打开。

我们在用户的主屏幕上安装了一个 Web 应用程序,它是几年前编写的,并且在没有 manifest.json 文件的 iOS 13 之前运行良好。我不得不在我们的应用程序中重写 WebSQL 代码以改用 IndexedDB,因为它们完全从 iOS 13 的主屏幕 Web 应用程序中删除了 WebSQL,即使在 Safari 高级设置中重新启用了 WebSQL。当我开始在 iPhone 上进行测试时,任何链接或重定向,即使使用 window.location.assign 或任何数量的其他方法,总是会在具有最小 UI 的应用内浏览器中打开下一页。这也弄乱了页面几何形状,因为没有滚动的全高页面现在可以通过将我们的“下一步”按钮元素推离屏幕底部进行滚动。因为我们在一些页面中间有一些可滚动的面板,所以它不是

长话短说,将一个最小的 manifest.json 文件添加到 Web 应用程序(甚至不需要范围设置)并删除并重新添加 Web 应用程序到主屏幕,然后使其行为与以前一样,所有页面都显示在独立视图。将 manifest.json 添加到已安装的主屏幕应用程序不会影响行为。


推荐阅读