Как загрузить локальные html файлы с изображениями, js и css в WebView Cocoa/Mac OS

У меня есть код для этой работы в iOS. Используя то, что я нашел здесь и вокруг Интернета, мне удалось найти где-нибудь версию Cocoa Mac Os, но изображения не загружаются. CSS и Javascript, похоже, не загружаются. Каталог для HTML добавляется в группу "Ресурсы", но добавляется в виде ссылок на папки (синяя папка), что делает Xcode уважением к структуре каталогов HTML-приложения.

Вот код, который я пытаюсь использовать:

NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" 
                                                     ofType:@"html" 
                                                inDirectory:@"/Patient_eMMR_HTML5" ];
NSString *html = [NSString stringWithContentsOfFile:htmlPath 
                                           encoding:NSUTF8StringEncoding 
                                              error:nil];

[[webView mainFrame] loadHTMLString:html baseURL:[NSURL fileURLWithPath:
                                                   [NSString stringWithFormat:@"%@/Patient_eMMR_HTML5/", 
                                                   [[NSBundle mainBundle] bundlePath]]]];

Это версия iOS для кода, из которого я основал код, который я использовал выше:

NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" 
                                                     ofType:@"html" 
                                                inDirectory:@"/Patient_eMMR_HTML5" ];

NSString *html = [NSString stringWithContentsOfFile:htmlPath 
                                           encoding:NSUTF8StringEncoding 
                                              error:nil];

[webView loadHTMLString:html 
                baseURL:[NSURL fileURLWithPath:
                         [NSString stringWithFormat:@"%@/Patient_eMMR_HTML5/", 
                          [[NSBundle mainBundle] bundlePath]]]];

Любая помощь приветствуется. Спасибо.

Ответ 1

Не нужно гадать с базовыми URL-адресами, если вы загружаете HTML через NSURLRequest, а не как строку:

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

Обратите внимание, что вы должны указывать имя каталога только в методе ‑pathForResource:…, не префикс его с помощью косой черты. Предполагается, что именованный каталог коренится в каталоге основного пакета.

Обратите внимание, что UIWebView также имеет метод ‑loadRequest:, поэтому вы можете использовать почти тот же код в iOS.

Ответ 2

Это сработало для меня с resourceURL на Mac OSX

[webView loadHTMLString:htmlContent baseURL:[[NSBundle mainBundle] resourceURL]]

Ответ 3

mserin, этот вопрос был направлен на Cocoa Framework для Mac Os X. Вы используете UIWebView, который является частью UIKit для Cocoa Touch. Если вы пытаетесь построить это для iPhone/iPad, вы должны посмотреть это сообщение.

Если вы пытаетесь сделать это, используйте Mac, используя код, который мы здесь используем, но вам нужно включить инфраструктуру WebKit следующим образом:

#import <WebKit/WebKit.h>

И затем подкласс WebView, а не UIWebView:

WebView *webView;

С таким свойством:

@property (nonatomic, retain) IBOutlet WebView *webView;