iOS:Apple 是不是为保存到主屏幕的 Web 应用禁用了 HTML5 离线功能?

Posted

技术标签:

【中文标题】iOS:Apple 是不是为保存到主屏幕的 Web 应用禁用了 HTML5 离线功能?【英文标题】:iOS: Did Apple disable HTML5 offline capability for web apps saved to the home screen?iOS:Apple 是否为保存到主屏幕的 Web 应用禁用了 HTML5 离线功能? 【发布时间】:2011-09-10 08:11:40 【问题描述】:

我一直在做很多工作,让一些网络应用程序使用 html5 清单在 ios 上脱机工作。我遇到了其他人遇到的典型问题并修复了它们,一切似乎都运行良好——除了我将网络应用程序保存到我的 iPhone 4 上的桌面。

如果我这样做然后启用飞行模式,我会在尝试通过主屏幕访问应用程序时收到以下警报:“您的应用程序名称无法打开,因为它没有连接到互联网。” 通过 Safari 浏览器访问应用程序在离线时可以正常工作。

如果有人知道这是否是我的错误,或者甚至是解决问题的可能性很小,请告诉。

即使下载新的《金融时报》网络应用程序(通过广泛的 localStorage 支持做得很好),在从主屏幕离线访问它时也会导致错误。

技术规格:在 iOS 4.3.3 上运行 iPhone 4(但在 4.3.2 中也发现了问题)

【问题讨论】:

@Nick:绝对是个阴谋 :) @Mauvis Ledford 我刚刚检查了sixrevisions.com/web-development/html5-iphone-app,但它不适用于我的 iPhone4 iOS 4.3.1。我认为 Apple 打破了这一点,它以前曾奏效过。 @Mauvis Ledford 我对进一步调试非常感兴趣,因为我们收到了一些关于 FT 应用程序无法离线工作的报告。此处的测试(在 iPad 4.2 和 4.3.3 和 iPhone 4.3.3 上)显示应用程序在主屏幕或 Dock 上离线工作;我什至尝试离线移动,然后将其从屏幕移动到扩展坞,仍然有效!某处的清单肯定涉及一些巫毒,但我无法确定最后的something ...(FWIW,似乎清除缓存和数据库,然后重新启动设备,似乎踢如果有错误,它就会工作)。 @Nick Weaver:请参阅下面的答案。似乎只需清除 Safari 缓存就可以了 - 遗憾的是,如果客户遇到这种情况,他们不会知道这一点,但感谢您的提示!如果您了解此问题的广泛性,请随时在此处继续发帖。如果这是一个流行的问题,可能会导致 iOS 上的离线 html5 应用死亡。 请注意,FT 应用程序添加了一个弹出窗口,其中包含清除缓存并重新启动设备以便离线使用的说明。感谢上帝的这篇文章,我开始失去它了...... 【参考方案1】:

在阅读了 cmets(尤其是 Rowan 的)之后,我进行了更多测试并找到了答案:

不,Apple 没有禁用保存到主屏幕的 Web 应用程序的 HTML5 离线功能,它在大多数情况下都有效。有一个错误会使其无法正常工作。它似乎与您的清单设置没有任何关系(除非它可能在某一时刻下载了错误的清单或不完整的清单。)我们不知道它有多普遍,但解决方法是清除您的移动 Safari 缓存。

步骤如下:

    关闭网络应用程序(确保它没有停留在后台)。 已清除移动 Safari 缓存:设置 > Safari > 清除缓存 重新打开应用(用于缓存)。 再次关闭网络应用程序(确保它没有停留在后台)。 启用“飞行模式”:设置 > 飞行模式 重新打开应用。

它现在应该可以离线工作了。如果不是,那么它可能是您的应用程序中的一个单独的清单问题。看起来像浏览器缓存的一个奇怪的错误 - 或者缓存完全已满?谁知道,但这就是答案。谢谢大家。

【讨论】:

在这方面有一点额外的警告:虽然它可能会改善主屏幕的情况,但清除缓存会破坏 MobileSafari 中的清单使用。清除缓存后,清单交换将在 MobileSafari 中失败并出现未指定的错误直到 MobileSafari 重新启动。大概这不会影响主屏幕应用程序,因为它们每次都会重新启动......(使用未来版本的测试版的人可能会发现这个特定的错误已解决......) 我只是想确认执行这些步骤也有助于解决我 iPhone 上的问题。我开发的同一个网络应用程序在 iPad 上的“飞行模式”下运行良好,但 iPhone 抱怨“无法打开 web-app-name,因为它没有连接到互联网。”使用上述步骤清除移动 Safari 缓存后,该网络应用程序现在可以在我的 iPhone 上运行。【参考方案2】:

将此添加到您的 html 中:

https://web.archive.org/web/20170201180939/https://jonathanstark.com/blog/debugging-html-5-offline-application-cache?filename=2009/09/27/debugging-html-5-offline-application-cache/

我发现它非常有用 - 尽管我已经创建了清单文件并将其与其他人的清单进行了比较,但这个 javascript 调试脚本给了我一个我在其他情况下永远找不到的线索。我的清单中显然有语法错误……长话短说,我不得不删除所有内容并一一添加到每个文件/图像的路径。最终结果是一样的,但它起作用了......多么奇怪!空格/cmets 会影响文件的语法吗?

【讨论】:

此处链接失效。【参考方案3】:

iOS 似乎对离线时的加载问题非常敏感。

在我正在处理的页面上脱机时,我收到了您的“无法打开”错误。问题原来是该页面创建了一个指向没有 AppCache 的站点的 iframe。删除这些 iframe 解决了这个问题。

就我而言,我使用window.navigator.standalone 处理它,它会告诉您您是否在iOS 主屏幕应用程序中运行。代码如下所示:

if (!navigator.standalone) insertFrames();

【讨论】:

以上是关于iOS:Apple 是不是为保存到主屏幕的 Web 应用禁用了 HTML5 离线功能?的主要内容,如果未能解决你的问题,请参考以下文章

移动端web开发常见问题

META相关上

移动端web开发常见问题------彭记(023)

iOS Safari 添加到我的 Angular Web 应用程序图标的主屏幕作为屏幕截图而不是 apple-touch-icon

移动端web开发技巧

IOS 通过界面图标启动Web应用 + 全屏应用 + 添加到主屏幕