IOS 6 - загрузка UIWebViewHTMLString не работает должным образом
Если кто-то испытал проблему ниже, сообщите мне, если вы смогли найти исправление. Я потратил пару дней, пытаясь придумать решение, но пока не повезло. Я использую XCode 4.5 с IOS 6 SDK Golden Master.
В основном, мое приложение читает и файл HTML и передает его содержимое в веб-представление для рендеринга.
NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"html"];
NSString *html = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
NSURL *baseURL = [NSURL URLWithString:@"http://mysite.com"];
[webView loadHTMLString:html baseURL:baseURL];
HTML содержит несколько ссылок <link> теги, например:
Проблема заключается в том, что UIWebView, похоже, имеет проблемы с загрузкой файла CSS. UIWebViewDelegate сразу получает webViewDidStartLoad, но требуется около 5 минут, прежде чем он получит сообщение WebViewDidFinishLoad. CSS не подбирается.
Если я удаляю ссылку из HTML, все работает нормально.
Ответы
Ответ 1
У меня была аналогичная проблема в моих веб-представлениях после выхода iOS 6. Попробуйте установить для следующего свойства UIWebView значение true (YES) {доступно только в iOS 6+}:
suppressesIncrementalRendering
A Boolean value indicating whether the web view suppresses content rendering until it is
fully loaded into memory.
@property(nonatomic) BOOL suppressesIncrementalRendering
В основном в моих обстоятельствах загрузка содержимого асинхронизации создавала немного странное состояние гонки, которого раньше не было. Потратил меня на то, чтобы найти это. Я также соглашаюсь с Брайаном - использовать некоторое прокси-программное обеспечение и следить за трафиком, чтобы проверить, что все, что вам нужно, входит и когда оно приходит. Это может быть очень полезно.
Сообщите мне, если это поможет?
Ответ 2
Без прямого доступа к проекту это действительно сложно сказать. Вы пытались загрузить страницу в локальном браузере, чтобы подтвердить, что css действительно загружается? Если он загружается, я предлагаю запустить приложение в симуляторе, а также запустить что-то вроде прокси-сервера Charles. Чарльз записывает все ваши исходящие запросы и отображает их результаты. Таким образом, вы можете определить, действительно ли проблема является внутренней или внешней для sdk.
Если у вас есть учетная запись разработчика Apple, просмотрите видеоролики WSDC 2012. Вы можете найти их здесь: https://developer.apple.com/videos/wwdc/2012/. Существует одно видео под названием "Отладка UIWebViews и веб-сайтов в iOS". Я еще не смотрел его, но он может содержать некоторую информацию, которая поможет вам решить проблему.
Удачи!
Ответ 3
Итак, если все css и другие файлы находятся на удаленном сервере, зачем вы загружаете html из локального файла? Вероятно, это связано с безопасностью (вы пытаетесь загрузить html из локального файла, в то время как другие вещи с удаленного), или просто проблема с обработкой baseURL в UIWebView