#ios #uiwebview
#iOS #uiwebview
Вопрос:
У меня есть веб-просмотр в приложении, загружающем фрагмент HTML с сервера, который включает текст и изображения. Я оборачиваю это в небольшой HTML и помещаю в веб-представление следующим образом:
NSString *cssPath = [[NSBundle mainBundle] pathForResource:@"style" ofType:@"css"];
NSString *cssLink = [NSString stringWithFormat:@"<link href='file://%@/' type='text/css' rel='stylesheet'/>", cssPath];
NSString *html = [[NSString stringWithFormat:@"<html><head><title></title><meta charset='UTF-8' />%@</head><body>%@</body></html>", cssLink, htmlContent] retain];
[myWebView loadHTMLString:html baseURL:currentURL];
Есть ли какой-либо способ исправить приведенный выше код, чтобы ссылка на локальную таблицу стилей работала?
Я мог бы без проблем загрузить таблицу стилей, если бы изменил базовый URL на файл ресурсов локального приложения, но это нарушает ссылки на изображения в HTML, загруженном с сервера.
Я мог бы также включить содержимое таблицы стилей непосредственно в html, но предпочел бы не делать этого по ряду причин.
Спасибо.
Комментарии:
1. вы когда-нибудь находили решение этой проблемы?
Ответ №1:
Что такое currentURL
? Это должно быть [[NSBundle mainBundle] bundleURL]
, например
[webview loadHTMLString:html baseURL:[[NSBundle mainBundle] bundleURL]];
И я считаю, что cssPath может быть просто именем файла, а не абсолютным путем.
Комментарии:
1. Спасибо! Я могу это сделать, и это работает просто отлично. Однако я использую html из другого API, который содержит относительные ссылки на изображения и тому подобное, поэтому baseUrl не может быть URL-адресом пакета. Возможно ли создать абсолютную ссылку на локальный файл css?
2. Вы пробовали
[[NSBundle mainBundle] URLForResource:@"style" withExtension:@"css"]
, которые возвращают URL вместо пути?3. Это выглядит как большой шаг в правильном направлении. URL-адрес выглядит правильно (file://localhost/var/mobile/Applications/67670E71-B8F0-4C99-9FAC-BAF0D6941E87/Wikithing.app/style.css) , но css по-прежнему не загружается, когда я связываю его в html. Есть мысли?
4. Я бы попытался проверить две вещи: доступен ли для чтения файл css (т. Е. Открыть и прочитать содержимое файла, возможно, отобразить его с помощью UIWebView), и правильно ли сформирована
html
строка.5. Похоже, что оба работают. Я могу зарегистрировать файл css, загруженный с локального URL, и если я заменю этот URL на один для файла css онлайн, он будет работать нормально. Возможно, это просто невозможно сделать.
Ответ №2:
Вероятно, слишком поздно, чтобы помочь тебе, Энтони. Извините! Вот рабочее решение для любых других храбрых героев, идущих тем же путем:
NSString* bundlePath = [[[NSBundle mainBundle] bundleURL] absoluteString];
NSString* cssString = [NSString stringWithFormat:@"<html><head><base href='%@'><link rel='stylesheet' type='text/css' href='style.css'/></head><body>Hi Mom!</body></html>"
, bundlePath"];
Комментарии:
1. куда мы должны поместить путь к пакету?
2. Извините, что добавили недостающий токен строки.