Html5 appcache:远程清单文件工作



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

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

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

谢谢!

查看本网站的基本要求和限制:http://appcachefacts.info/

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

  • Cross-Origin-Policy:您正在引用来自另一个来源的清单文件->不允许
  • WebKit:我假设你的WebView渲染index.html是WebKit驱动的(iOs/Android)。我在台式电脑上用Safari和Chrome进行了一些测试,发现如果index.html是从http://localhostfile://... url提供的,即使清单尊重Cross-Origin-Policy,清单也会被忽略。这将对您造成打击,因为在大多数情况下,设备上本地部署的index.html将由file://...提供服务。
所以我想到了将清单下载到设备并在我的index.html中引用它的想法。这导致了一些我无法修复的额外问题(我的设置是PhoneGap, jQueryMobile, iOS):
  • Mime-Type:你不能确保manifest(从设备的存储中服务)是用正确的mime类型的标头服务的,但是没有它们,浏览器将忽略manifest。
  • Manifest-URI:您无法(硬编码)分发具有预定义manifest="uri/to/appCacheManifest.manifest"属性的index.html文件(因为您需要在知道此uri之前从服务器下载并保存它)。此外,你不能操纵你的资产分布与PhoneGap应用程序(www文件夹)以某种方式改变属性。

直到现在我还不能让manifest在PhoneGap WebView中工作。我读了一些文章,人们提到(iOS) WebView无法与清单文件一起工作,但这是不正确的。如果你通过移动浏览器浏览到一个web应用程序,并在你的主屏幕上保存一个书签,iOS会将这个网站嵌入到WebView中。我用我的应用程序(由web服务器服务;没有嵌入到PhoneGap中),Manifest工作正常。

这意味着如果你能够移动你的文件,"坐在一个设备的存储"到一个web服务器,你设置一个本地的WebView指向那个位置,manifest应该工作良好

最新更新