Ссылка UIWebView на локальные файлы без указания базовой ссылки в каталоге приложения

#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. Извините, что добавили недостающий токен строки.