2010-10-07 3 views
7

После просмотра немного, я все еще не могу понять это. Я добавил HTML-страницу и ее каталог изображений в свою группу ресурсов ресурсов в Xcode (скопировал их).Cocoa WebView - Загрузка локальной HTML-страницы

Когда я пытаюсь загрузить WebView с помощью следующего кода, текст отображается в порядке, но изображения не загружаются.

NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"index.html"]; 
NSString *htmlContent = [NSString stringWithContentsOfFile:path]; 
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]; 
[[tempWebView mainFrame] loadHTMLString:htmlContent baseURL:url]; 

EDIT: Извините за задержку, вот некоторые основные html, которые не удались.

<html> 
    <body> 
     <img src="images/bg.png"></img> 
    </body> 
</html> 

И мой отредактированный код выглядит следующим образом -

NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
[[webView1 mainFrame] loadRequest:[NSURLRequest requestWithURL:url]]; 

EDIT2: Просто понял, что это была проблема с пути. Очевидно, <img src = "images/bg.png"> не работает, но если я скопирую bg.png в корневой каталог и скажу <img src = "bg.png">, все будет хорошо. Я все еще не уверен, где я ошибаюсь.

+0

Покажите нам пример HTML, ссылающийся на изображение. –

ответ

8

нужно сделать следующее:

  1. Вместо того, чтобы путь ресурсов и сшивание подпуть на него сами, ask the bundle to give you the correct path.
  2. Вместо обработки пути вообще, ask the bundle to give you the correct URL. (Требуется Mac OS X 10.6 или новее.)
  3. Вместо того, чтобы вводить содержимое HTML непосредственно в фрейм, ask the WebView to load the URL.

Это уменьшает ваш код до двух строк, которые, если HTML-код верен, будут работать.

+0

На самом деле, моя первоначальная реализация была такой. Но я видел один из вопросов SO, где у кого-то была такая же проблема, но исправил его, реализовав его таким образом. Мне было интересно, может ли это иметь какое-то отношение к baseURL. –

+1

Tejaswi Yerukalapudi: У вас есть ссылка на один из этих вопросов? –

+0

Хмм, я не могу сейчас это найти, но я отредактировал свою реализацию, чтобы следовать этому. Похоже, что моя проблема связана с использованием синтаксиса, который перемещается в подпапки, чтобы захватить изображения в HTML. Я почему-то спрашиваю, почему это происходит, но я не знаю, что я могу сделать, чтобы исправить это, спасибо за вашу помощь снова! –

3

Этот код работает для меня (только имеющие проблемы с Canvas):

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"index" 
                ofType:@"html" 
               inDirectory:@"html_files_folder"]; 
NSURL* fileURL = [NSURL fileURLWithPath:filePath]; 
NSURLRequest* request = [NSURLRequest requestWithURL:fileURL]; 
[[webView mainFrame] loadRequest:request]; 
1

Вам нужно будет получить данные файла изображения в base64 строки. И поместите эту строку в тег img, как показано ниже.

<img src="data:image/png;base64,iVBORw0KGgoAAAANS..." /> 

Смотрите это для более подробной информации: http://danielmclaren.com/node/90

4

Я думаю, что здесь проблема с тем, как файлы копируются в каталог ресурсов на этапе сборки. Любые папки, которые отображаются в виде групп в Xcode, будут сглажены при копировании. Если вы добавляете всю структуру папок веб-сайта в свой проект, вы должны выбрать «Создать ссылки на папки для любых добавленных папок» при добавлении структуры.

Пример: У меня есть html-файл, который ссылается на изображение в папке с тем же именем.Я добавляю все это в мой проект выбора «ссылки папки»:

Adding the files

Файлы будут выглядеть в моем проекте (обратите внимание на синюю папку):

Project tree

Когда проект построена папка веб-содержимое будет поддерживаться:

Resources folder in the bundle

Нет необходимости начинать устанавливать базовые URL-адреса или загружать строки. Теперь веб-страница может быть успешно загружена следующим образом:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"LocalTestWeb" withExtension:@"html"]; 
[[self.webView mainFrame] loadRequest:[NSURLRequest requestWithURL:url]]; 
Смежные вопросы