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

为iOS应用程序中的UIWebView预填充HTML5脱机appcache,ios,html,uiwebview,application-cache,html5-appcache,Ios,Html,Uiwebview,Application Cache,Html5 Appcache,是否可以创建一个预填充了HTML5离线应用缓存的UIWebView,这样即使用户第一次访问UIWebView,它也可以离线工作 如果是,怎么做 我知道我可以通过其他机制实现这一点,但以上是我的第一选择。我只是好奇这是否可能 我在文档中没有看到任何相关内容。我认为这可能会归结为一个问题,即您是否可以通过编程方式写入UIWebView的缓存文件(也就是说,UIWebView缓存是否驻留在应用程序的沙箱中)——如果您不能,游戏就结束了。如果可以,那么问题就变成了将预填充的缓存文件放置到位后会发生什么,

是否可以创建一个预填充了HTML5离线应用缓存的UIWebView,这样即使用户第一次访问UIWebView,它也可以离线工作

如果是,怎么做

我知道我可以通过其他机制实现这一点,但以上是我的第一选择。我只是好奇这是否可能


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

我认为这可能会归结为一个问题,即您是否可以通过编程方式写入UIWebView的缓存文件(也就是说,UIWebView缓存是否驻留在应用程序的沙箱中)——如果您不能,游戏就结束了。如果可以,那么问题就变成了将预填充的缓存文件放置到位后会发生什么,以及UIWebView是否被“愚弄”到认为它已经下载并缓存了您的HTML5内容

如果您正在使用iPhone模拟器测试您的应用程序,请查看
~/Library/Application Support/iPhone模拟器/5.0/Applications
(如有必要,将“5.0”替换为您的iOS版本)。对于在模拟器中编译的每个应用程序,您应该看到一长串十六进制数字;找到与您的应用程序对应的文件,然后在
库/Caches/[您的应用程序的标识符]
子文件夹中查找名为
Cache.db
的文件

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


无论如何,这是我用来判断是否可能的攻击线——我很有信心答案是“不,不可能”,除非UIWebView缓存确实存在于你的应用程序的沙箱中,是你可以写的,您可以通过替换UIWebView的缓存文件来愚弄它。

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

ApplicationCache.dbcache.db

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

顺便说一句,您可以轻松地使用它们,因为它们很简单,是SQLITE db


我希望这会有所帮助

我所说的强制加载的意思是:如果访问了网页,则缓存元素以便下次更快地加载。我所说的强制加载或预热缓存的意思是在后台向uiwebview发出请求,将数据加载到缓存中,以便更快地加载数据,因此当用户实际单击它时,它在缓存中包含信息

如果你使用chrome,这与他们的策略类似,他们使用chrome来加快浏览速度:当页面加载时,他们会立即找到页面上的所有链接并解析链接,因此如果用户单击链接,他们不必等待DNS服务器的响应,就可以看到页面,因为页面已经为他们完成了

我希望这有点道理

引述:


这是一个很酷的问题。考虑只查看开发者提供的内容,否则苹果会拒绝你的应用程序。可以在隐藏视图中考虑“强制加载”,以预热缓存。通过这种方式,您可以将元素添加到缓存中,但除非您了解内部缓存算法,否则无法从缓存中删除项。。。我想说,这不是一种黑客行为,而是一种技术文尼巴德11月23日17:26


@文尼巴德:我不完全确定你所说的“强制加载”是什么意思。你能详细说明一下吗?(听起来可能值得回答而不是评论!)Trott 11月23日17:40,如果我错了,请纠正我,但我相信你可以从应用程序的文档目录在
UIWebView
中打开本地文件。你没有错,但正如我在问题中所写,“我知道我可以通过其他机制实现这一点,但以上是我的第一选择。“这是一个很酷的问题。考虑只查看开发者提供的内容,否则苹果会拒绝你的应用程序。可以在隐藏视图中考虑“强制加载”,以预热缓存。通过这种方式,您可以将元素添加到缓存中,但除非您了解内部缓存算法,否则无法从缓存中删除项。。。我想说这不是一种黑客行为,而是一种技术@文尼巴德:我不完全确定你所说的“强制加载”是什么意思。你能详细说明一下吗?(听起来可能值得一提的是答案而不是评论!)当然,我现在添加了一个回应…我必须使用您的答案和Deniz Mert Edincik的答案中的信息来实现这一点。我希望我能平分赏金。我可能会抛硬币。谢谢好吧,我已经做到了,能够将appcache文件复制到正确的位置,但是应用程序没有使用它。无论如何,这都可能是个坏主意。正如@vinnybad所指出的,苹果很可能会拒绝使用这种恶作剧的应用程序。但这非常有趣(无论如何,对我来说)而且信息丰富。谢谢你的信息@Trott根据苹果开发者协议第3.3.2节,我们可以通过内置的Webkit框架下载解释代码,以更新混合iOS应用程序,只要该应用程序与其最初的广告用途保持一致。我想用我自己的应用程序开始这样做,但我不确定如何处理预填充UIWebView缓存,以便可以从iOS应用程序商店下载应用程序,然后立即脱机使用。