Возможно, это похоже на этот вопрос, на который нет ответов: 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 есть тег сценария, например этот:
Если я удалю тег сценария, страница загрузится и будет отображаться нормально в iOS5. И я могу сказать, что файл css, на который ссылаются так же, как и на файл сценария .js, загружается и применяется.
Если я сохраню тег скрипта, но сделаю файл myscript.js полностью пустым, он все равно не загрузится.
Мне это кажется проблемой межсайтового скриптинга - WebView считает, что он должен запретить загрузку скрипта (и фактически запретить рендеринг страницы ??).
Не уверен, где идти отсюда. Идеи?
ОБНОВЛЕНИЕ
Это все больше и больше похоже на проблему межсайтового скриптинга. Если я удалю тег, он работает, хотя и без сценария.Все мои изображения загружаются из baseURL, как и моя таблица стилей. То есть мы знаем, что baseURL работает.
Если я заменю тег фактическим содержимым моего файла сценария, он заработает, так что проблема не в самом сценарии.
Все еще ищу подтверждения и дополнительные идеи, которые нужно обойти. Мне неудобно вставлять сам скрипт в html, но пока что это мое лучшее решение. В качестве альтернативы я мог бы записать html в файловую систему и загрузить через loadRequest, но опять же, это не мой первый выбор.
ОБНОВЛЕНИЕ 2
Благодаря @djromero у меня есть решение. Мой документ является документом XHTML, и поэтому в нем используется самозакрывающийся тег скрипта (без содержимого, только атрибуты). Но loadHTMLString: baseURL:
, по-видимому, предполагает MIMEType text / html
, который UIWebView, по-видимому, теперь интерпретирует более строго - и в документах text / html
у вас может не быть самозакрывающихся тегов.
Мое решение - переключиться на loadData: MIMEtype: baseURL:
и указать application / xhtml + xml
в качестве типа mime. Я могу легко построить NSData из моего NSString, используя dataUsingEncoding:
.