2017-07-16 711 views
4

我正在制作一个网页浏览器,并像每个其他网页浏览器我想通知用户在网页加载失败时发生的错误。如何正确实施didFailProvisionalNavigation与WKWebView?

目前,我在didFailProvisionalNavigation方法显示错误的localizedDescription。就这样!

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error 
{ 
    [self presentError:error.localizedDescription animated:YES]; 

    [_delegate webViewDidFailNavigation:self error:error]; 
} 

presentError方法处理一些与问题无关的自定义UI东西。

  1. 互联网连接似乎是脱机:

    的方法,上述用于显示通常的错误,如工作优异。

  2. 无法找到具有指定主机名的服务器。

但它也显示一些不寻常的错误,如:

  1. 操作无法完成(NSURL ErrorDomain错误-999)

我不喜欢这方法有两个原因:

  • 显示错误消息一些技术性的东西“NSURL”,但我可以忽略它。
  • 最重要的是当大多数时候显示上述错误时,网页是完全可用的,但由于它是didFailProvisionalNavigation错误,我必须禁用正在使用的页面,而是显示错误。

我不知道还有什么其他小错误可能发生,不应该以我处理它们的方式处理。不幸的是,我不知道如何区分诸如“连接似乎脱机”之类的重大错误以及诸如“操作无法完成”之类的小错误。

处理导航失败的标准方式是什么?

回答

0

而不是

webView(_:didFailProvisionalNavigation:withError:) 

你们为什么不使用它?

webView(_:didFail:withError:) 

似乎时有错误,导致该网站无法显示内容,而不是当一个页面已经呈现,并试图加载下一个页面,只应调用。

+0

第一种方法实际上表现得应该是这样。它在适当的时间以所有网址错误代码进行响应。当我用随机字符串“iasdjfoaskfgo.com”测试它时,didFail:withError:方法没有引发错误“未找到主机” – Vulkan