12

如果有人遇到以下问题,请告诉我您是否能够找到解决方法。我花了几天时间试图想出一个解决方案,但到目前为止还没有运气。我将 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,但它需要大约 5 分钟才能收到 webViewDidFinishLoad 消息。CSS 没有被拾取。

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

4

3 回答 3

4

iOS 6 发布后,我的 Web 视图中出现了类似的问题。尝试将以下 UIWebView 属性设置为 true (YES) { only available in 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

基本上在我的情况下,异步内容加载会产生一些以前不存在的奇怪竞争条件。我花了一段时间才找到那个。不过我也同意布赖恩的观点——使用一些代理软件并观察你的流量,以验证你需要的所有东西都在进来,什么时候进来。这可能非常有用。

让我知道它是否有帮助?

于 2012-11-25T00:58:46.290 回答
1

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

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

祝你好运!

于 2012-10-26T13:11:45.290 回答
0

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

于 2012-11-04T22:05:07.693 回答