UIWebView loadHTMLString не работает в iOS5

Возможно, это похоже на этот вопрос, который не имеет ответов: loadHTMLString не работает с iOS5?

У меня есть UIWebView, который я заполняю с помощью loadHTMLString: baseURL:. HTML небольшой и простой, и он ссылается на таблицу стилей css и javascript script, которые загружаются через 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, который указан так же, как и файл script.js, загружен и применен.

Если я сохраняю тег script, но делаю файл myscript.js полностью пустым, он все равно не загружается.

Мне кажется, что это похоже на проблему межсайтового скриптинга - поскольку WebView считает, что он должен запретить загрузку script (и, фактически, запретить отображение страницы?)

Не уверен, куда идти отсюда. Идеи?

UPDATE

Это все больше напоминает проблему межсайтового скриптинга. Если я удалю тег, он будет работать, хотя sans script. Все мои изображения загружаются из baseURL, как и моя таблица стилей. То есть мы знаем, что baseURL работает.

Если я заменил тег фактическим содержимым моего файла script, тогда он будет работать, поэтому проблема не в script.

Ищите подтверждения и дополнительные идеи, чтобы обойти. Мне неудобно сначала встраивать в script в html, но это мое лучшее решение. В качестве альтернативы я мог бы написать html в файловую систему и загрузить через loadRequest, но опять же, не мой первый выбор.

ОБНОВЛЕНИЕ 2

Благодаря @djromero у меня есть решение. Мой документ является документом XHTML и, как таковой, использует самозакрывающийся тег script (без содержимого, только атрибуты). Но loadHTMLString:baseURL:, по-видимому, предполагает MIMEType text/html, который UIWebView, по-видимому, теперь интерпретирует более строго - и в text/html у вас могут не быть закрывающие теги.

Мое решение - переключиться на loadData:MIMEtype:baseURL: и указать application/xhtml+xml как тип mime. Я легко могу построить NSData из моего NSString, используя dataUsingEncoding:.

Ответ 1

Я не эксперт по стандартам HTML, но... вы пытались закрыть тег <script>:


<script type="text/javascript" src="./myscript.js"></script>

Это сработало для меня.

Ответ 2

Способ загрузки HTML файла, содержащего ссылки на встроенные папки, такие как '/file.js', заключается в загрузке его в виде URL-адреса, а не как STRING.

NSString *urlAddress = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"htm"];
NSURL *url = [NSURL fileURLWithPath:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj];

Я использую это вместе со ссылочными папками (файлы без ссылок) для создания обычной структуры сайта в Xcode с помощью js/и css/и изображений/ссылок во встроенном файле index.htm, например

<script type="text/javascript" src="js/jquery-1.6.4.min.js"></script>

UPDATE

Я не думаю, что ссылка на URI в загруженной строке HTML была официально поддержана. Если вы должны использовать строку, загрузите необходимые файлы ресурсов в строку перед загрузкой в ​​UIWebView.