我有一个使用 PWA 模板的非弹出式 CRA 应用程序。我正在注册服务工作者以启用离线使用。它在我测试过的所有浏览器和环境中都运行良好,它过去也能在我的 iPad 上运行——直到本周,当我更新到 iOS 16.4 时。
现在,在 iPad 上,页面会在第一次访问时加载(例如,在我清除 Safari 中的所有网络数据之后)。刷新应用程序后,我会在该加载和所有后续加载上看到一个空白屏幕。恢复的唯一方法是再次重置网络数据。
我将我的 iPad 连接到我的 Macbook 并使用了 Safari 开发者工具。我可以访问主应用程序和服务工作者开发者控制台。两者都没有显示任何错误,但我可以看到 service worker 返回的 index.html 页面是空的:
<html>
<head></head>
<body></body>
</html>
我还将我的 Macbook 上的 Safari 更新到 16.4,我得到了不同的不良行为。在 MacOS Safari 上,Service Worker 在我在线时每次加载时都会返回正确的 index.html。但是如果我离线,我会得到:
Safari can't open the page <my url>. The error is:
"FetchEvent.respondWith received an error: TypeError: Load failed" (WebKitServiceWorker:0)
在其他环境/浏览器中,一切都继续正常工作。
我什至不知道如何解决这个问题。我希望在工作箱中启用日志记录(在this之后),但我不知道如何使用 CRA 创建开发版本。我尝试了各种像this这样的东西,但据我所知,工作箱使用
NODE_ENV
来确定它是否应该记录,而且我不知道有什么方法可以将NODE_ENV
更改为production
以外的东西在构建中。
什么可能导致 iPad 和 MacOS 上的 Safari 中的 service-worker 行为,我该如何解决它?