iOS 6 - UIWebView loadHTMLString无法正常工作

时间:2012-09-17 20:55:53

标签: objective-c uiwebview ios6

如果有人遇到以下问题,请告诉我您是否能找到解决方法。我花了几天时间试图想出一个解决方案,但到目前为止还没有运气。我正在使用XCode 4.5和iOS 6 SDK Golden Master。

基本上,我的应用程序读取和HTML文件并将其内容交给Web视图进行渲染。

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>标签,例如:     < link href =“/ webshare / accounts / maxk / styles / mobile_app_iphone_article.css?1312306173”media =“screen”rel =“stylesheet”type =“text / css”/>

问题是,UIWebView似乎在下载CSS文件时遇到麻烦。 UIWebViewDelegate确实立即接收webViewDidStartLoad,但它在收到webViewDidFinishLoad消息之前大约需要5分钟。 CSS没有被拿起。

如果我从HTML中删除链接,一切正常。

3 个答案:

答案 0 :(得分:4)

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

基本上在我的情况下,异步内容加载创造了一些奇怪的竞争条件,而不是以前。花了一段时间找到那一个。我同意Brian的意见 - 使用一些代理软件并观察你的流量来验证你需要的所有内容以及它何时进入。这可以非常有用。

让我知道它是否有帮助?

答案 1 :(得分:1)

如果没有直接访问项目,很难说。您是否尝试在本地浏览器中加载页面以确认css确实已加载?如果它正在加载,那么我建议在模拟器中运行应用程序,同时运行类似Charles代理的东西。 Charles将记录您的所有出站请求并显示它们的结果。这样,您就可以确定问题是真正的内部还是外部的。

如果您有Apple开发者帐户,请查看WWDC 2012会话视频。你可以在这里找到它们:https://developer.apple.com/videos/wwdc/2012/。有一个标题为“在iOS上调试UIWebViews和网站”的视频。我还没看过,但它可能包含一些可以帮助您解决问题的信息。

祝你好运!

答案 2 :(得分:0)

因此,如果所有css和其他内容都在远程服务器上,为什么要从本地文件加载html?可能这与安全相关(你试图从本地文件加载html而其他东西来自远程),或者只是在UIWebView中处理baseURL的问题