如果 Service Worker 中有多余的“if (false) {}”,PWA 仅在 iPadOS 上无法离线工作

问题描述 投票:0回答:1

我有一个渐进式 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

progressive-web-apps service-worker offline ipados
1个回答
0
投票

通过将文件恢复为通过 Visual Studio 设置项目时创建的原始文件已解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.