我们的应用程序部署到物理设备上,因此起始页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://localhost
或file://...
url提供的,即使清单尊重Cross-Origin-Policy,清单也会被忽略。这将对您造成打击,因为在大多数情况下,设备上本地部署的index.html将由file://...
提供服务。
-
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应该工作良好