2014-02-05 52 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')。 –