html5 应用程序缓存 : does remote manifest file work?

标签 html application-cache

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

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

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

谢谢!

最佳答案

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

当您的文件部署到设备存储时,有一些因素会阻止应用程序缓存工作:

  • Cross-Origin-Policy :您正在引用来自其他来源的 list 文件 -> 不允许
  • WebKit :我假设您的 WebView 渲染 index.html 是由 WebKit 驱动的(iOs/Android)。我在台式电脑上使用 Safari 和 Chrome 进行了一些测试,发现如果 index.html 是从 http://localhost 提供的,则 list 会被忽略。或file://...即使 list 遵循跨源策略,URL 也是如此。这会对您造成打击,因为您设备上本地部署的 index.html 将由 file://... 提供服务。在大多数情况下。

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

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

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

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

关于html5 应用程序缓存 : does remote manifest file work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7030170/

相关文章:

javascript - 无法读取 null JS 的属性 'appendChild'

css - float 图像后,需要在div中居中

html - 页脚 : Bootstrap trouble

javascript - 选择框将不允许选择 UIWebView iOS9

javascript - 通过 javascript 清除和更新 html5 应用程序缓存

javascript - AppCache 在 iOS 上非常慢

ios - 在 WKWebView 中启用应用程序缓存

html - 在 GWT 托管模式下测试 html 5 应用程序缓存

javascript - HTML5 客户端中的 WCF 回调