我有一个渐进式 Web 应用程序 (PWA),如果 Service Worker 中有多余的“if (false) {}”,则该应用程序无法在 iPadOS 上离线工作。
为了演示问题,我设置了2个网站;
https://pwadoeswork.azurewebsites.net/(这个可以离线工作)和
https://pwadoesnotwork.azurewebsites.net/(这个不能离线工作)
这些仅在 Service Worker 中有所不同。不起作用的一个在顶部有以下完全冗余的代码......
if (false)
{
self.addEventListener('fetch', () => { });
}
else
{
:
:
}
“(false)”由服务器端代码(Razor .net core)生成,在开发中运行时为 true,在生产中运行时为 false(部分灵感来自创建新项目时的 Visual Studio Blazor PWA 模板)
PWA 可以按照预期在 PC、Android(手机、带有 Chrome 或三星互联网的平板电脑)和 iOS(手机)上离线安装和工作。 但是,仅在 iPadOS(至少 v15 和 v16)上,安装 PWA(Safari->共享->添加到主屏幕->添加)并运行它后,然后将其关闭(多指捏合并滑动应用程序关闭)并进入飞行模式,然后再次从主屏幕运行它,Safari 报告它处于离线状态。 如果您对有效的版本执行相同的过程(没有冗余代码),那么它会按预期离线运行。
唯一的区别是“if(false) {}”代码。不用说,这应该不会影响任何事情。
一些问题;
我在这里遗漏了什么吗?
这只是 iPadOS/Safari 的错误吗?
iPadOS 在运行 Service Worker 时是否运行某些精简版本的 JavaScript 引擎?
是否还有其他我应该注意的隐藏问题或限制,这些问题或限制仅影响带有 PWA 的 iPadOS?
此行为是否记录在某处?
DJA
通过将文件恢复为通过 Visual Studio 设置项目时创建的原始文件已解决此问题。