检测和自定义UIWebView的“无法读取文档”错误

5

我正在测试一个UIWebview,其中包含多种不同类型的文档 - .xlsx、.jpg等 - 大多数情况下都可以正常打开。但有时候我会打开一个本地文件,在网页视图中就会出现以下这个消息:

Unable to Read Document
An error occurred while reading the document

我不关心这个错误为什么会发生 - 例如,当我故意向UIWebView提供垃圾文件时,它就会发生。问题是我无法找出“何时”发生这种情况。它不会触发webView:didFailLoadWithError,也不会触发NSException(通过@try和@catch),而且当我在webViewDidFinishLoad中检查文档时,webView.request.HTTPBody为空。
有人知道如何检测UIWebView无法显示内容的情况吗?

这是一个老问题,但在我的情况下,在iOS 7/8中webView:didFailLoadWithError对我有用。有时使用stringByEvaluatingJavaScriptFromString会传递数据,但不是我要找的那个(旧的?垃圾文件?)。 - testing
2个回答

3
just call uiwebview delegate method 

- (void)webViewDidStartLoad:(UIWebView *)webView
{

}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString *html = [webView stringByEvaluatingJavaScriptFromString:
                      @"document.body.innerHTML"];
    if ([html rangeOfString:@"Unable to Read Document."].location == NSNotFound) {

       NSLog(@"NO Error");

    }
    else
    {
//        NSLog(@"File contains Error");
    }

}

0
如果检查日志没有发现异常情况,可以在实际设备上运行。为了提供一点帮助,我的日志显示:
Cannot find data converter callback for uti public.data
Failed to generate preview

这意味着模拟器出现了故障。在遇到同样的问题后,我经历了整个最终认证、安装和配置过程,并确认Word 97和包含文本的Pages / Pages.zip文件确实可以在实际设备上正常显示。问题已解决。模拟器本身有问题,这非常令人困扰,因为这个小提示似乎没有出现在发布说明中,也使开发稍微复杂了一点。然而,解决方法是在Xcode中选择设备并部署,它应该可以工作。


1
谢谢您的回复,但那不是问题所在。我不难读取Word文件。相反,我遇到的问题是无法检测到UIWebView无法读取任何特定文件。这与模拟器/设备差异无关。 - cetcet
通常会检查返回值是否为nil或长度为零。我在文件中使用了错误的编码(保存为Roman 8而不是UTF),这个程序并没有失败,但字符串长度为0。花了我两天时间才找出问题所在。 - PapaSmurf
@PapaSmurf:谁应该返回某些东西? - testing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接