在iOS应用程序中为UIWebView预填充HTML5脱机appcache

时间:2011-11-14 18:42:19

标签: ios html5 uiwebview application-cache html5-appcache

是否可以创建一个预先填充了HTML5离线appcache的UIWebView,以便即使是第一次用户访问UIWebView时也能脱机工作?

若然,怎么样?

我知道我可以通过其他机制实现这一目标,但以上是我的首选。如果可能的话,我只是很好奇。

我在文档中没有看到任何内容。

3 个答案:

答案 0 :(得分:6)

您要查找的是缓存文件夹中的两个文件。

ApplicationCache.db cache.db

它们都位于您具有完全访问权限的应用程序的库/缓存/ [您的软件包标识符] 文件夹中。您可以将预先填充的缓存数据添加到捆绑包中,只需将其复制到应用程序启动时的缓存文件夹即可。

顺便说一下,你可以轻松地玩它们,因为它们很简单,就像SQLITE数据库一样。

我希望这会有所帮助

答案 1 :(得分:4)

我认为这可能会减少一个问题,即您是否可以以编程方式写入UIWebView的缓存文件(也就是说,UIWebView缓存是否位于您应用程序的沙箱中) - 如果您不能,则游戏结束。如果您可以,那么在将预先填充的缓存文件放入适当位置之后会出现什么问题,以及UIWebView是否“被欺骗”以认为已经下载并缓存了您的HTML5内容

如果您正在使用iPhone模拟器测试您的应用,请查看~/Library/Application Support/iPhone Simulator/5.0/Applications(如果需要,请将iOS 5.0替换为“5.0”)。您应该在模拟器中为每个应用程序看到一个长十六进制数字字符串;找到与您的应用对应的那个,然后在Library/Caches/[your app's identifier]子文件夹中查找名为Cache.db的文件。

可能是UIWebView存储其缓存数据的位置。如果不是,游戏结束,你的问题的答案是“不,那是不可能的”。如果,其中UIWebView缓存数据,则可能可以在模拟器中填充此Cache.db文件,获取文件,将其存储在您的应用包中,然后在预先填充缓存时将缓存写入适当的位置。

无论如何,这是我用来确定是否可能的攻击线 - 我非常有信心答案是“不,不可能”,除非事实证明UIWebView缓存 驻留在应用程序的沙箱中,可由您编写,您可以通过替换其缓存文件来欺骗UIWebView。

答案 2 :(得分:1)

强制加载的意思是:如果访问了网页,则会缓存元素,以便下次加载更快的内容。强制加载或预热缓存的意思是在后台实际向uiwebview发出请求,将数据加载到缓存中以加快加载速度,这样当用户实际点击它时,它就会在缓存中显示信息。

如果你使用chrome,它类似于他们用来使冲浪更快一点的策略:当页面加载时,他们立即找到页面上的所有链接并解析链接,因此如果用户点击链接,他们就会在看到页面之前,必须等待DNS服务器的响应,因为它已经为他们完成了!

我希望这更有意义。

QUOTE:

这是一个非常酷的问题。考虑只查看开发人员参考中提供的内容,因为苹果将拒绝您的应用程序。你可以在隐藏视图中考虑“强制加载”任何你想要的东西来加热缓存。通过这种方式,您可以向缓存添加元素,但除非您知道内部缓存算法,否则您无权从缓存中删除项目...我会说这不是一个黑客攻击一种技术! - vinnybad 11月23日17:26

@vinnybad:我不完全确定“强制加载”是什么意思。你能详细说明吗? (听起来可能值得回答而不是评论!) - Trott 11月23日17:40