Показать содержимое zip-файла в WebView

#objective-c #cocoa #webkit

#objective-c #cocoa #webkit

Вопрос:

Я хочу иметь WebView, который отображает некоторые статические файлы из пакета приложений. Поскольку у меня большое количество небольших файлов, я хотел бы упаковать их все в сжатый архив, чтобы приложение не занимало слишком много места. Каков наилучший способ добиться этого?

Комментарии:

1. Просто мысль: поддерживает ли WebKit веб-архивы Safari?

2. @Bavarious: Я не знаю, но я выясню. Похоже, что у этого подхода есть потенциал.

Ответ №1:

Это должно вам помочь: http://code.google.com/p/ziparchive /

Для отображения данных в WebView:

В Mac OS X используйте WebFrame с loadHTMLString:baseURL:

В iOS используйте UIWebView с loadHTMLString:baseURL:

Комментарии:

1. Что ж, это частично отвечает на вопрос. К сожалению, это не отвечает на самую сложную часть: как заставить WebKit загружать файлы, находящиеся внутри архива. (Я мог бы сначала распаковать архив в файловую систему, но это полностью противоречит цели.)

2. Какие файлы вы пытаетесь отобразить в WebView?

3. Просто обычный веб-материал. HTML, CSS, Javascript, изображения.

Ответ №2:

Что вы, вероятно, хотите сделать, так это реализовать подкласс NSURLProtocol, который будет разрешать относительные URL-адреса путем чтения их из zip-архива. Таким образом, вам нужно только изначально прочитать «основной» HTML-файл из ZIP-файла в память, а остальные будут считаны по требованию. Чтобы заставить WebKit использовать ваши пользовательские протоколы URL для разрешения относительных путей, вы могли бы создать экземпляр WebView следующим образом:

 [[web_view mainFrame] loadHTMLString:your_main_html baseURL:[[NSURL alloc] initWithString:@"zip:///"]];
  

У Apple есть действительно хороший пример объединения пользовательского протокола URL с WebView здесь:

https://developer.apple.com/library/mac/#samplecode/SpecialPictureProtocol/Introduction/Intro.html#//apple_ref/doc/uid/DTS10003816