如何查看UIWebView loadHTMLString中的错误:?

时间:2011-06-06 16:23:33

标签: iphone uiwebview

如果Apple在loadHTMLString期间遇到错误,他们会将它们抛出到一个单独的线程上,没有堆栈跟踪(在Xcode4中),并且没有输出到控制台。

你如何听取这些错误,调试它们,并最终对它们做出反应?

(仅供参考 - 我正在使用loadHTMLString,因为我需要加载本地和远程资源的混合,而这种方法提供了唯一的简单方法,AFAIAA)

编辑:...抱歉,要明确:Apple可能会遇到不同的错误。例如,如果尝试加载嵌入式资源(例如CSS文件)时出错,则不会将其视为“页面加载失败”,实际上它会报告成功的页面加载。

恕我直言......这是正确的行为:如果HTML解析器能够从错误中恢复,我不希望“页面加载失败”。但错误仍然很重要 - 它们告诉我们为什么页面正在渲染,例如没有背景图像或图像损坏。

3 个答案:

答案 0 :(得分:3)

出于调试目的,您可以附加Safari Web Inspector。为此:

  1. 确保您安装了支持SWI的Safari版本 - 因此至少在Mac OS X 10.7.4上安装了Safari 6.
  2. 在您用于测试应用的设备(或模拟器)上,启用设置> Safari>高级> “网络检查员”。
  3. 启动Safari。
  4. 启用Safari>偏好>高级> “在菜单栏中显示开发菜单”。
  5. 运行应用程序,当您正在使用显示的webview时,转到Safari>开发> [设备名称或“iPhone模拟器”]> [网址 - 将在应用名称下列出]
  6. 它将显示页面已加载的静态文件。 (如果你想看到Javascript错误,你需要正常连接,在所有异常中设置一个断点 - 在SWI中,而不仅仅是在Xcode中! - 然后选择根级页面和CMD + R重新加载它。)

    据我所知,以编程方式执行此操作的唯一方法(例如,如果要重试失败的页面加载)是使用NSURLProtocol子类。

答案 1 :(得分:1)

虽然我没有使用loadHTMLString:,但您应该能够将控制器注册为UIWebViewDelegate并实施– webView:didFailLoadWithError:方法,该方法应在失败时调用。

答案 2 :(得分:0)

将委托分配给您的webview并在委托中使用此方法。

 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
  {

       NSLog(@"Error is %@",error);

  }