UIWebView baseURL и абсолютный путь

У меня есть HTML-страница, которая построена следующим образом:

<html>
  <head>
    <link rel="stylesheet" href="/style.css" />
  </head>
  <body>

  </body>
</html>

Он хранится в моем каталоге документов:

/Users/username/Library/Application Support/iPhone Simulator/5.1/Applications/12345-ID/Documents/mysite/index.html

Я также сохранил style.css в каталоге документов:

/Users/username/Library/Application Support/iPhone Simulator/5.1/Applications/12345-ID/Documents/mysite/style.css

Но теперь, когда я пытаюсь загрузить html в свой веб-просмотр, используя это:

NSURL *test = [NSURL URLWithString:@"file:///Users/username/Library/Application Support/iPhone%20Simulator/5.1/Applications/12345-ID/Documents/mysite/"]
[myWebView loadHTMLString:<the content retrieved from index.html> baseURL:test];

CSS не загружен, когда я перехватываю запрос к таблице стилей с помощью NSURLProtocol, я вижу, что запрос неверен. Он пытается запросить:

файл: ///style.css

вместо полного baseURL. Теперь я могу решить эту проблему, удалив / перед /style.css в html-файле. Но есть ли простой способ решить эту проблему в собственном коде без изменения html?


person Thizzer    schedule 27.06.2012    source источник
comment
Это именно то, что я использую (см. Содержание)   -  person Thizzer    schedule 28.06.2012
comment
Вы пробовали убрать '/' с конца строки NSURL * test = [NSURL .......? У вас может возникнуть условие двойной косой черты, которое может привести к тому, что по умолчанию он будет соответствовать местоположению пользователя, просто мысль.   -  person trumpetlicks    schedule 28.06.2012
comment
ОК, в последней попытке попробуйте ответ, который я предоставил. Он должен работать, поскольку я использовал этот метод в своих приложениях для отображения множества изображений с использованием относительных путей. Единственная разница в том, что в моем HTML-коде перед именем файла нет косой черты, что означает, что ваш /style.css должен быть изменен на style.css. Есть ли причина, по которой вы так против этого ???   -  person trumpetlicks    schedule 28.06.2012
comment
Нет, нет особых причин, по которым я против удаления / впереди, но HTML создается не мной. Поэтому я хотел посмотреть, есть ли способ решить эту проблему в родном, поэтому мне пришлось бы побеспокоить создателя, чтобы он удалил /   -  person Thizzer    schedule 28.06.2012
comment
Примечание: вы можете получить локальный URI, используя pathForResource:ofType: из NSBundle, а затем ссылаться с помощью file://<local_uri> в своем собственном HTML. Например, для jquery-2.1.1.min.js я использую: NSString *jQueryFile = [[NSBundle mainBundle] pathForResource:@"jquery-2.1.1.min" ofType:@"js"]; NSString *jQueryUri = [@"file://" stringByAppendingString:jQueryFile];, а затем просто добавляю его в свой HTML: NSString *html = [NSString stringWithFormat:@"<some_html><script type=\"text/javascript\" src=\"%@\"></script></some_html>", jQueryUri];. Наконец: [myWebView loadHTMLString:html baseURL:nil];   -  person Alejandro Iván    schedule 13.09.2016


Ответы (2)


Создайте свой путь и базовый URL-адрес следующим образом:

NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
[webView loadHTMLString:htmlString baseURL:baseURL];

Отличный блог на эту тему:

http://iphoneincubator.com/blog/windows-views/uiwebview-revisited

SO QA по теме

UIWebView и локальный файл css

person trumpetlicks    schedule 28.06.2012
comment
Удаление косой черты было единственным решением, тем не менее, большое спасибо за попытку помочь :) - person Thizzer; 29.06.2012
comment
Я несколько подумал, что так и будет, но пока вы не попробуете комбинации ... К сожалению, не нашлось решения, которое соответствовало бы вашим потребностям. - person trumpetlicks; 29.06.2012

Удаление косой черты было единственным решением

person Thizzer    schedule 23.07.2012
comment
Но у вас возникнет проблема, когда приложение будет запущено и больше не будет находиться в симуляторе на этом конкретном пути ... решение с трубными щелчками действительно независимо от местоположения приложения. - person darwin; 22.09.2014
comment
Должна быть возможность использовать абсолютные пути в веб-просмотре. Вам необходимо реализовать собственный протокол NSURLProtocol. Хотя для этого требуется много кода, поэтому я ищу простой способ справиться с этим. Как только найду. Я выложу здесь. - person Piotr Czapla; 05.10.2014