UIWebView loadHTMLString не работает в iOS5
Возможно, это похоже на вопрос, на который нет ответов:loadHTMLString не работает с iOS5?
У меня есть UIWebView, который я заполняю с помощью loadHTMLString: baseURL :. HTML является небольшим и простым, и он ссылается на таблицу стилей CSS и сценарий javascript, которые загружаются через baseURL :, который устанавливается в каталог внутри пакета приложения.
// load the html
NSString* filePath = [NSString stringWithFormat: @"%@/html", [[NSBundle mainBundle] resourcePath ] ];
[_pCurrentWebView loadHTMLString: html baseURL: [NSURL fileURLWithPath: filePath isDirectory: YES ] ];
Это всегда работало в прошлом, но это сломано в iOS5. В iOS5 ничего не отображается в UIWebView. Веб-просмотр действительно обеспечивает источник всех ожидаемых событий - например, shouldLoadRequest, didStartLoad, didFinishLoad и т. д.
HTML имеет тег script, например:
<script type="text/javascript" src="./myscript.js" />
Если я удаляю тег script, то страница загружается и хорошо отображается в iOS5. И я могу сказать, что файл css, на который ссылаются так же, как файл сценария .js, загружается и применяется.
Если я сохраню тег script, но сделаю файл myscript.js полностью пустым, он все равно не сможет загрузиться.
Мне кажется, что это своего рода проблема межсайтового скриптинга - в том, что WebView считает, что он должен запретить загрузку скрипта (и фактически запретить рендеринг страницы ??)
Не уверен, куда идти отсюда. Идеи?
ОБНОВИТЬ
Это все больше и больше напоминает проблему межсайтового скриптинга. Если я удаляю тег, он работает, хотя и без сценария. Все мои изображения загружаются из baseURL, как и моя таблица стилей. То есть мы знаем, что baseURL работает.
Если я заменяю тег фактическим содержимым моего файла скрипта, он работает, поэтому проблема не в самом скрипте.
Все еще ищу подтверждение и дополнительные идеи, чтобы обойти. Мне неудобно вставлять сам скрипт в html, но пока это мое лучшее решение. В качестве альтернативы я мог бы написать html в файловую систему и загрузить через loadRequest, но опять же, не мой первый выбор.
ОБНОВЛЕНИЕ 2
Благодаря @djromero у меня есть решение. Мой документ является документом XHTML и поэтому использует самозакрывающийся тег сценария (без содержимого, только атрибуты). НоloadHTMLString:baseURL:
по-видимому, предполагает MIMETypetext/html
который UIWebView, по-видимому, теперь интерпретирует более строго - и вtext/html
документы, которые вы можете не иметь самозакрывающиеся теги.
Мое решение состоит в том, чтобы перейти кloadData:MIMEtype:baseURL:
и указатьapplication/xhtml+xml
как тип пантомимы. Я могу легко построить NSData из моего NSString, используяdataUsingEncoding:
.