2

我们的应用程序部署到物理设备,因此起始页 index.html 位于设备的存储中,该文件将引用远程托管的 JavaScript 文件和其他资源。也就是说,index.html 本身并不托管在我们的 Web 服务器中。在这种情况下是否可以使用 html5 应用程序缓存?也就是说,html 元素看起来像这样:

<html manifest="http://remotehost.com/site.manifest">

这支持吗?或者,如果我们的网络服务器没有托管 index.html,是否有解决方法让它工作?

谢谢!

4

1 回答 1

4

检查此站点的基本要求和限制: http ://appcachefacts.info/

当您的文件部署到设备的存储时,有几件事会阻止 appcache 工作:

  • Cross-Origin-Policy:您正在从另一个来源引用清单文件-> 不允许
  • WebKit:我假设您呈现 index.html 的 WebView 是由 WebKit 驱动的(iOs/Android)。我在台式 PC 上使用 Safari 和 Chrome 进行了一些测试,发现如果 index.html 是从http://localhostfile://...URL 提供的,即使清单尊重跨域策略,清单也会被忽略。file://...这会打击你,因为在大多数情况下,你的设备上本地部署的 index.html 将由你提供服务。

所以我想出了将清单下载到设备并在我的 index.html 中引用它的想法。这导致了一些我无法解决的额外问题(我的设置是 PhoneGap、jQueryMobile、iOS):

  • Mime-Type:您无法确保清单(从设备的存储中提供)使用正确的 mime 类型标头提供,但没有它们,浏览器将忽略清单。
  • Manifest-URI:您无法(硬编码)分发具有预定义manifest="uri/to/appCacheManifest.manifest"属性的 index.html 文件(因为您需要在知道此 uri 之前从服务器下载并保存它)。此外,您无法操纵随 PhoneGap 应用程序(www 文件夹)分发的资产以某种方式更改属性。

到目前为止,我无法让清单在 PhoneGap WebView 中工作。我阅读了一些文章,其中人们提到(iOS)WebView 无法使用清单文件,但这是不正确的。如果您通过移动浏览器导航到 Web 应用程序并在主屏幕上保存书签,iOS 会将此站点嵌入到 WebView 中。我用我的应用程序(由网络服务器提供服务;未嵌入在 PhoneGap 中)进行了尝试,并且 Manifest 工作得很好。

这意味着如果您能够将“位于设备存储中”的文件移动到网络服务器,并且您设置了本机 WebView 以指向该位置,那么清单应该可以正常工作。

于 2012-05-19T16:25:49.497 回答