是否可以创建一个预先填充了 HTML5 离线 appcache 的 UIWebView,以便即使用户第一次访问 UIWebView 也可以离线工作?
如果是这样,怎么做?
我知道我可以通过其他机制来实现这一点,但以上是我的首选。我只是很好奇这是否可能。
我在文档中没有看到任何关于它的内容。
是否可以创建一个预先填充了 HTML5 离线 appcache 的 UIWebView,以便即使用户第一次访问 UIWebView 也可以离线工作?
如果是这样,怎么做?
我知道我可以通过其他机制来实现这一点,但以上是我的首选。我只是很好奇这是否可能。
我在文档中没有看到任何关于它的内容。
您正在寻找的是缓存文件夹中的两个文件。
ApplicationCache.db和cache.db
它们都位于您的应用程序的Library/Caches/[your bundle identifier]文件夹中,您拥有完全访问权限。您可以将预先填充的缓存数据添加到您的捆绑包中,并在应用启动时将其复制到缓存文件夹。
顺便说一句,您可以轻松地使用它们,因为它们很简单,SQLITE db。
我希望这有帮助
我认为这可能会简化为您是否可以以编程方式写入 UIWebView 的缓存文件的问题(也就是说,UIWebView 缓存是否驻留在您的应用程序的沙箱中) - 如果您不能,那么游戏结束。如果可以,那么问题就在于在您将预填充的缓存文件放置到位后会发生什么,以及 UIWebView 是否“被愚弄”到认为它已经下载并缓存了您的 HTML5 内容。
如果您使用 iPhone 模拟器来测试您的应用程序,请查看~/Library/Application Support/iPhone Simulator/5.0/Applications
(如果需要,将“5.0”替换为您的 iOS 版本)。你应该会看到你在模拟器中编译的每个应用程序的一长串十六进制数字;找到与您的应用程序对应的应用程序,然后在Library/Caches/[your app's identifier]
子文件夹中查找名为Cache.db
.
这可能是 UIWebView 存储其缓存数据的地方。如果不是,游戏结束,你的问题的答案是“不,那是不可能的”。如果它是UIWebView 缓存数据的地方,那么可能会在模拟器中填充此Cache.db
文件,获取文件,将其存储在您的应用程序包中,然后在需要预填充缓存时将缓存写入适当的位置.
无论如何,这就是我用来确定它是否可能的攻击线——我非常有信心答案将是“不,不可能”,除非事实证明 UIWebView 缓存确实驻留在您的应用程序的沙箱中,是你可写的,你可以通过替换它的缓存文件来欺骗 UIWebView。
我所说的强制加载的意思是:如果访问了一个网页,则缓存元素以便下次加载更快。我的意思是强制加载或预热缓存实际上是在后台向 uiwebview 发出请求以将数据加载到缓存中以加快加载速度,因此当用户实际单击它时,它会在缓存中包含信息。
如果您使用 chrome,这类似于他们用来加快浏览速度的策略:当页面加载时,他们会立即找到页面上的所有链接并解析链接,因此如果用户点击链接,他们没有在看到页面之前等待 DNS 服务器的响应,因为它已经为它们完成了!
我希望这更有意义。
引用:
这是一个很酷的问题。考虑只查看开发人员参考中提供的内容,否则苹果会拒绝您的应用程序。您可以考虑在隐藏视图中“强制加载”任何您想要的东西来预热缓存。通过这种方式,您可以将元素添加到缓存中,但除非您知道内部缓存算法,否则您无权从缓存中删除项目......我想说这不是黑客,而是更多一种技术!– 温尼巴德 11 月 23 日 17:26
@vinnybad:我不完全确定“强制加载”是什么意思。你能详细说明一下吗?(听起来可能值得给出答案而不是评论!) - Trott 11 月 23 日 17:40