【问题标题】:HTML5 application cache on iPad offline app - not working if server is unavailable?iPad 离线应用程序上的 HTML5 应用程序缓存 - 如果服务器不可用,则无法正常工作?
【发布时间】:2011-10-29 13:24:45
【问题描述】:

我正在为 iPad 开发一个小型 HTML5 Web 应用程序,旨在以全屏模式工作(即,它具有专有的 Apple 元标记,已添加到主屏幕):

<meta name="apple-mobile-web-app-capable" content="yes" />

应用程序基本上通过 AJAX 获取一些数据并将其呈现给用户。 AJAX 数据是外部的(来自不同的域、不同的服务器)。我有跨域请求的系统设置,它们在在线模式下工作。换句话说:静态数据位于服务器 A 上,动态数据位于服务器 B 上。

我创建了一个适当的缓存清单文件,列出了网站的所有静态内容(HTML、CSS、图像、JS),然后在末尾添加了 NETWORK: * 部分 - 这样所有动态内容 (AJAX) 总是从网络检索。如果请求失败,应用程序会“优雅地”失败,显示一些虚假内容。

通过上述设置,会发生以下情况:

  1. 如果我在线运行应用程序,一切正常 ;)
  2. 如果我在 iPad 上禁用 WiFi(纯离线模式),一切都会按预期工作 - 应用程序会退回到离线内容
  3. 如果我再次连接到网络,但将静态内容服务器脱机(缓存了所有内容的服务器),应用程序将无法启动;在闪屏中花了一段时间后,它向我显示了一个带有&lt;app&gt; could not be opened because it could not connect to the server. 的弹出窗口;我可以选择关闭或重试。

上面的第 3 点让我抓狂,因为这是我开始摆弄应用程序缓存的唯一原因。如果无法访问清单文件,为什么 iPad Web 应用程序不回退到缓存内容? (不是404,服务器离线)

HTML5 iphone offline webapp 的答案完全不正确吗?如果没有,如何在 iPad 上实现这种行为?

【问题讨论】:

    标签: ipad html offline-caching application-cache


    【解决方案1】:

    第 2 点和第 3 点是完全不同的场景,所以我们不能期望相同的行为。

    在第 3 点中,设备在在线模式下无法回退到缓存内容,因为如果这样做,用户将无法知道他是否连接到服务器。

    我的意思是,在离线模式下,用户知道这一点,并且知道他正在使用缓存数据。但在在线模式下,他希望从服务器获取内容。如果服务器不可用,用户应该知道这一点。如果服务器不可用,直接将他发送到缓存数据,服务器错误会对他隐藏,以为自己连接了,其实不可用。

    例如,网络浏览器可以缓存页面以在离线模式下查看。但是如果我们处于在线模式并尝试打开一个不可用的页面,我们希望看到错误消息,而不是没有任何警告的页面缓存版本。如果需要,我们可以进入离线模式查看缓存页面,但正确的行为是向用户显示错误。

    【讨论】:

    • 如果我以在线模式打开页面,我仍然会显示所有内容的缓存版本 - 因为它是在清单文件中指定的。 “动态内容”在清单文件的NETWORK: 部分中指定。请阅读有关 HTML5 应用程序缓存及其行为的信息。 iPad 只能在场景 3 中检索的唯一文件实际上是 cache.manifest 文件;我想知道是否有办法将行为设置为“如果清单文件不可用,请使用以前的清单文件”而不是失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2012-05-06
    相关资源
    最近更新 更多