Ответ 1
При загрузке этих ресурсов вам необходимо установить базовый URL. Вы можете сделать это, используя метод:
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
... где baseURL будет URL-адресом файла вашей папки ресурсов.
У меня есть веб-просмотр в приложении для iPhone, и у меня также есть некоторые html файлы внутри папки Resources. Когда мое приложение загружается, я загружаю страницу из своих ресурсов в свой веб-просмотр. Но мне нужно сделать ссылки внутри моего веб-представления, которые указывают на некоторые другие ресурсы (например, изображения или другие html файлы). Выполнение относительной ссылки не работает:
<a href="OtherPage.html">Doesn't work</a>
При загрузке этих ресурсов вам необходимо установить базовый URL. Вы можете сделать это, используя метод:
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
... где baseURL будет URL-адресом файла вашей папки ресурсов.
По-видимому, есть немного получения в соответствии с Заметки о выпуске iPhone SDK для iPhone OS 3.0:
Проблема: UIWebView не может загружать локальные ресурсы в приложения, созданные против 3.0.
При использовании
[UIWebView loadHTMLString:baseURL:]
HTML строка не должна ссылаться на локальную ресурсов с помощью схемыfile://
. Вместо этого перейдите вNULL
илиfile://
URL дляbaseURL:
или включить ресурсов непосредственно в HTML с<style>
и<script>
.
Достаточно честный. Но прохождение в стандартном номере file://
URL для baseURL
не совсем работает. Однако... получается, что если вы измените /
на //
и пробелы на %20
, вы будете установлены! (Использование %20
имеет большой смысл, но часть с двойной косой поразила меня врасплох.)
Скажем, у вас уже есть NSString *markup
. Здесь все, что вы делаете. (Я прочитал здесь код для удобства чтения. Возможно, вы захотите реорганизовать/настроить на вкус.)
NSString *resourcePath = [[[[NSBundle mainBundle] resourcePath]
stringByReplacingOccurrencesOfString:@"/" withString:@"//"]
stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
[webView loadHTMLString:markup baseURL:[NSURL URLWithString:
[NSString stringWithFormat:@"file:/%@//", resourcePath]]];
Пока ваш CSS, JavaScript и изображения упоминаются только по имени файла, это должно сделать трюк в iPhone OS 3.0, где loadHTMLString:baseURL:
будет затронуто!
Я исправил это: я использовал это для BaseURL, как сказал Август:
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
Спасибо!
Этот код вернет строку с URL-адресом файла с именем "OtherPage.html" в вашем каталоге ресурсов пакета.
[[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"OtherPage" ofType:@"html"]] absoluteString]
Это сработало для меня. Мои файлы HTML были в подпапках (а не в группах) в моем проекте. Моя страница html называется page01, а подпапка - html:
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *pathToHtml = @"html";
NSURL *baseURL = [[NSURL alloc] initFileURLWithPath:pathToHtml isDirectory:YES];
NSString *html = [NSString stringWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:@"page01" ofType:@"html"
inDirectory:@"html"]
encoding:NSUTF8StringEncoding error:nil];
[webview loadHTMLString:html baseURL:baseURL];
Сначала попробуйте загрузить OtherPage.html. Если вы не можете, то это не так, и вы пропустили часть добавления в проект. Если вы можете, то в ссылке может быть только опечатка, или baseURL может быть неправильным, как указано в августе. Когда я создал html файл с изображениями в нем, которые были в файле ресурсов, он отлично работал, используя
<img src="file.png">
Посмотрите, как это делает Phonegap. Вот их учебник по локальным ресурсам на iPhone. Шаг 11 может быть тем, чего вы пренебрегаете.
Возможно, он имеет какое-то отношение к baseurl: когда я загружаю ресурсы, я использую эту строку:
[webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];
см. в конце, он говорит baseURL: "". Если я это сделаю, это не сработает (сбой), но я не знаю пути к моим ресурсам. Если кто-то делает.....?
Для меня проблема заключалась в том, что файлы js не были включены в комплект. Обязательно проверьте это.
ОК, здесь 3,5 года спустя:)... попробовал предложение Майкла Гейлорда точно, но он не работал в симах для 5.0, 5.1, 6.0, 6.1 - и в реальных устройствах, работающих на нем. Однако это разъяснение о том, где вложены ресурсы (Где идет сборка сборки?) помогло мне это сделать:
Убедитесь, что проект распознает, что он должен быть в комплекте:
Итак, все, что мне нужно было сделать, это скопировать-вставить код Майкла над вербальной базой и изменить эту строку:
inDirectory:@"html"]
в
inDirectory:nil]
и Шаазам! он работал:)