2

我正在为 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. 如果我再次连接到网络,但将静态内容服务器脱机(缓存了所有内容的服务器),应用程序将无法启动;在闪屏中花了一段时间后,它向我显示了一个弹出窗口<app> could not be opened because it could not connect to the server.;我可以选择关闭或重试。

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

HTML5 iphone离线webapp的答案完全不正确吗?如果没有,我怎样才能在 iPad 上实现这种行为?

4

1 回答 1

1

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

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

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

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

于 2011-08-18T08:23:27.067 回答