2014-02-05 24 views
1

我有一个黑盒子容器。我喜欢黑盒子,他们很好地混淆了事物。在UIWebView中使用自定义URL方案

这个黑盒子是一个加密的zip(有点),里面有一些html文件(这是简短的,没有那么痛苦的解释,版本)。

这些文件需要在UIWebView中显示。现在,简单的方法来解密,解压缩到文件系统,从文件系统加载文件。这很好,除了黑盒子包含秘密的东西,并且不能放置在文件系统中,甚至不是一秒钟,所以,我制作了一个C库,实际上流式传输盒子的内容(直接出盒) 。

现在,我有这种流媒体功能,必须以某种方式使其与UIWebView一起工作。我想到的第一件事是使用UIWebView可以发送请求的迷你本地HTTP服务器。然后,我会自己管理这些请求,并使用我已完成的流式lib返回UIWebView所需的内容。我认为这很有效,但我认为一个迷你HTTP服务器可能会有点矫枉过正。

所以,我想知道,是否有另一种方式干扰UIWebView和文件系统?也许使用自定义模式?像myschema://?每当UIWebView向myschema://myfile.html发出请求时,我都会以某种方式干扰并返回它所需的数据?

这样的想法是否可行?我应该从哪里开始?也许NSURLRequest?

编辑:我发现这个:iPhone SDK: Loading resources from custom URL scheme。然而,听起来不错,浏览器将如何知道请求的大小,类型(xml/binary/xhtml)以及HTTP放入其头部的所有信息?

回答

2

创建一个自定义NSURLProtocol子类并注册它,以便它将处理HTTP请求。这将允许您处理来自UIWebView的请求,但您认为合适,包括从库中提供数据。您可以通过查看RNCachingURLProtocol来检查执行磁盘缓存请求以允许脱机浏览的实施。我个人使用我编写的自定义NSURLProtocol子类来处理将一些JavaScript代码注入加载到UIWebView中的页面,并且它工作得很好。

+0

我唯一不能理解的是,我将如何能够发送回UIWebView有关文件大小,文件类型的数据(使用HTTP时通常进入标题的东西) – Meda

+0

除此之外,您的提议似乎绝对合理! – Meda

+2

您将使用该信息创建一个'NSURLResponse',并使用'-URLProtocol:didReceiveResponse:cacheStoragePolicy:'将其发送到协议客户端('NSURLProtocolClient')。 –