html5 appcache:远程清单文件有效吗?

时间:2011-08-11 17:21:36

标签: html5 application-cache

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

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

支持吗?或者,如果我们的Web服务器没有托管index.html,是否有解决方法使其工作?

谢谢!

1 个答案:

答案 0 :(得分:4)

检查此网站是否有基本要求和限制: http://appcachefacts.info/

当您的文件部署到设备的存储空间时,有一些事情会阻止appcache工作:

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

所以我提出了将清单下载到设备并在我的index.html中引用它的想法。这导致了一些我无法修复的其他问题(我的设置是PhoneGap,jQueryMobile,iOS):

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

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

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