iOS Mobile Web App(通过将页面保存到主屏幕)离线可用性

标签 ios caching offlineapps

我正在尝试使页面移动网络应用兼容,以便在 iOS 设备上离线使用。我已将移动网络应用兼容的元标记添加到文档的头部,并指定了一个包含页面所有资源的 cache.manifest 文件。

我可以看到 cache.manifest 文件被权威地用于加载页面资源(即在控制台中,当我第一次清除/加载 list 时,以及在后续页面加载时,我可以看到资源被保存到设备我可以看到在 window.applicationCache 上触发了“noupdate”事件。

尽管如此,当我在我目前正在测试的 iOS 设备(iPad 第二代,运行 iOS 8.3)上关闭 WiFi 时,我立即收到一条消息说无法加载页面,因为找不到服务器,此消息上的唯一选项是重试(导致相同的错误)或关闭移动网络应用程序。

即使出现此错误,我也可以看到通知背后的页面加载,因此很明显资源仍在从应用程序缓存中获取,但正如我所说,“无互联网”消息似乎在任何类型的应用程序之前触发发生缓存交互。

任何人都可以建议我如何抑制此“离线错误”消息,或修复 cache.manifest 以使其按预期工作,从而允许我使用保存到主屏幕的移动网络应用程序,而无需连接上网?

最佳答案

注意:iOS Safari 和桌面版 Safari 不支持 Service Workers 技术,也没有明确的路线图。

从 03/2016 开始 service workers have better browser支持(Chrome、Firefox)我建议将此功能与 manifest.json 结合使用。

对我来说,提供完整离线体验的是 sw-precache .您可以将其设置为构建任务(Gulp、Grunt)或手动运行。因此,网络应用加载 UI 即使 wifi 提前关闭也是如此。

主要部分是添加正确的静态文件掩码 - 检查 writeServiceWorkerFile 函数中的 staticFileGlobs 属性,如下所示:

 staticFileGlobs: [
                rootDir + '/css/**.css',
                rootDir + '/',
                rootDir + 'index.html',
                rootDir + 'index.html/#/home',
                rootDir + 'index.html/#/offline',
                rootDir + '/img/**.*',
                rootDir + '/js/**.js',
                rootDir + '/locales/**.js'
            ],

关于iOS Mobile Web App(通过将页面保存到主屏幕)离线可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29610385/

相关文章:

php - 如何将 Redis 用于 Postgresql 的 LRU 缓存?

javascript - 由于客户端未注册,在服务 worker 的第一次页面加载中未执行获取事件

javascript - 用于动态报告/可视化的 HTML

ios - 使用 insets 向 UITableView 添加 View ,有什么问题吗?

ios - 在 iOS swift 中异步/并发/并行运行任务

ios - 大型 NSDictionary 的 objectForKey 是否慢?

在在线和离线模式下工作的 Android 应用程序?

iphone - iOS 应用因 "Could not load NIB in bundle"而崩溃

C++:仿函数的缓存友好性

linux - 刷新CPU缓存而不使缓存失效?