检查此站点的基本要求和限制:
http ://appcachefacts.info/
当您的文件部署到设备的存储时,有几件事会阻止 appcache 工作:
Cross-Origin-Policy
:您正在从另一个来源引用清单文件-> 不允许
WebKit
:我假设您呈现 index.html 的 WebView 是由 WebKit 驱动的(iOs/Android)。我在台式 PC 上使用 Safari 和 Chrome 进行了一些测试,发现如果 index.html 是从http://localhost
或file://...
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 以指向该位置,那么清单应该可以正常工作。