2014-02-05 2 views
1

У меня есть контейнер черного ящика. Мне нравятся черные ящики, они так хорошо запутывают.Использование специальной схемы URL с UIWebView

Этот черный ящик является зашифрованным почтовым индексом (вроде) и имеет внутри некоторые html-файлы (это короткая, не столь болезненная для объяснения, версия).

Эти файлы должны отображаться в UIWebView. Теперь, простой способ сделать это, дешифровать, распаковать в файловую систему, загрузить файл из файловой системы. Это хорошо, за исключением того, что черный ящик содержит секретные вещи и не может просто лежать на файловой системе, даже не секунду, поэтому я создал библиотеку C, которая фактически передает содержимое окна (прямо из коробки) ,

Теперь у меня есть эта возможность потоковой передачи данных и вам нужно как-то заставить ее работать с UIWebView. Первое, что приходит мне на ум, - это использовать мини-локальный HTTP-сервер, на котором UIWebView может отправлять свои запросы. Затем я сам обработал запросы и вернул содержимое, которое требуется UIWebView, используя потоковый lib, который я сделал. Это будет работать, я полагаю, хорошо, но я думаю, что мини-HTTP-сервер каким-то образом, может быть, немного переборщил.

Итак, мне было интересно, есть ли другой способ вмешаться между UIWebView и файловой системой? Может быть, используя пользовательскую схему? Как myschema: //? И каждый раз, когда UIWebView делает запрос к myschema: //myfile.html, я каким-то образом вмешивался и возвращал нужные ему данные?

Является ли такая идея жизнеспособной? С чего я должен начать? Может быть, NSURLRequest?

EDIT: Я нашел это: 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' с этой информацией и отправите его клиенту протокола (' NSURLProtocolClient'), используя '-URLProtocol: didReceiveResponse: cacheStoragePolicy:'. –

Смежные вопросы