【问题标题】:How to cache images and html files in PhoneGap如何在 PhoneGap 中缓存图像和 html 文件
【发布时间】:2011-07-16 12:54:39
【问题描述】:

我需要一种方法在我的站点中的 PhoneGap 中缓存图像和 html 文件。我计划让用户在没有互联网连接的情况下看到网站,就像它一样。但我只看到有关 sql 数据存储的信息,但我如何存储图像(并稍后使用)。

【问题讨论】:

标签: caching cordova


【解决方案1】:

要缓存图像,请查看这个库——我是它的创建者——: imgcache.js .它的设计目的是使用本地文件系统缓存图像。如果您查看示例,您会发现它还可以检测何时无法加载图像(因为您处于离线状态或连接非常糟糕),然后自动将其替换为缓存的图像。 webapp 的用户甚至没有注意到它处于离线状态。

至于 html 页面.. 如果它们是 html 静态文件,它们可以本地存储在 web 应用程序中(file:// 在 phonegap 中)。 如果它们是动态生成的页面,如果您有少量数据,请检查 localStorage API,否则检查文件系统 API。

对于我的网络应用程序,我只从我的服务器检索 json 数据(并使用Backbone+Underscore 处理/呈现它)。 json 有效负载存储在 localStorage 中。如果应用程序离线,它将从本地存储而不是服务器获取 json 数据(Backbone.dualStorage 的自制分支)

然后您将获得完整的离线体验:页面+图像。

【讨论】:

  • 我将它与最新版本的 Phonegap (2.2.0) 一起使用,效果很好!
  • 我正在使用 imgcache.js。在缓存图像文件时,它会以不同的名称保存 icon.png,例如 7678dkld9dio.png。我错过了什么吗?它重命名图像文件。例如:) shell@android:/storage/sdcard0/ws $ ls Energy.png shell@android:/storage/sdcard0/ws $ cd .. shell@android:/storage/sdcard0 $ cd imgcache/ shell@android:/storage /sdcard0/imgcache $ ls
  • 这是正确的,它是设计使然。这样做的目的是避免名称冲突:如果文件没有在缓存中使用唯一文件名重命名(它们都存储在同一个文件夹中),您可能有两个不同的图像具有相同的文件名但缓存的 URL 不同仅保存两张图片中的一张,替换另一张。
  • 我可以使用你的库来存储 TTF 字体吗?我的问题是检索它们并将其插入 DOM。怎么可能?
  • @Mattia > 这个库主要是为图像设计的,所以它不适用于 webfonts。但请注意,TTF 字体不能直接在网络中使用,请查看 webfonts。
【解决方案2】:

像您可能需要进行简单离线操作的缓存并不那么容易。

您的第一个选项是cache manifest。它有一些限制(例如缓存的大小),但可能对您有用,因为它旨在满足您的需求。

另一个选项是您可以使用文件系统 API 将内容存储在设备的磁盘上。这有一些缺点,例如安全性以及您必须从不同于您通常从网络上加载的路径/url 加载文件的事实。查看hydra 插件以获取此示例。

最后一个选择可能是将内容存储在 localStorage 中(它的好处是在所有平台上都是私有的),然后在需要时将其从那里拉出来……这意味着对所有图像进行 base64 处理,因此这是一个与标准缓存有很大不同。

【讨论】:

【解决方案3】:

缓存在 Android 操作系统上非常可行。但是如上所述,在 Apple 上,图像大小和缓存大小等存在限制。

如果您愿意在 iOS 上集成并允许缓存,您可以使用“缓存清单”来执行此操作。但请记住缺点和限制。 还 如果您想将文件保存到我的 App 下的 Documents 文件夹中,Apple 将拒绝您的 App。原因是iOS6以后系统将Documents文件夹下的所有数据备份到iCould,所以Apple不允许像图片或JSON文件这样可以从你的服务器再次同步的大数据保存在这个文件夹中。

所以还有另一种很好的解决方法所以可以使用 LocalFileSystem.TEMPORARY 代替。它不会将数据保存到Library/Cache,而是将数据保存到App的临时文件夹,该文件夹不会自动备份到iCloud,也不会自动删除。

问候 拉吉夫

【讨论】:

    猜你喜欢
    • 2014-09-07
    • 2013-07-14
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多