我正在制作一个网络浏览器,并且像所有其他网络浏览器一样,我想通知用户网页加载失败时发生的错误。
目前,我正在 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 内容。
上述方法非常适合显示常见错误,例如:
- 互联网连接似乎处于离线状态。
- 找不到具有指定主机名的服务器。
但它也会显示一些不寻常的错误,例如:
- 操作无法完成(NSURL ErrorDomain error -999)
我不喜欢这种方法有两个原因:
- 错误消息显示一些技术性内容“NSURL”,但我可以忽略它。
- 最重要的是,大多数情况下,当显示上述错误时,网页完全可用,但由于它是 didFailProvisionalNavigation 错误,我必须禁用该页面并显示错误。
我不知道还有哪些其他小错误不应按照我的处理方式处理。不幸的是,我不知道有什么方法可以区分主要错误(例如“连接似乎已脱机”)和次要错误(例如“操作无法完成”)。
处理导航失败的标准方法是什么?
最佳答案
我也需要使用 didFailProvisionalNavigation。现在我是这样解决的:
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(nonnull NSError *)error
{
if(error.code != -999) // Prevent the error from showing when didFailProvisionalNavigation is triggered after a cancelled load (reload)
{
// Show the error
}
}
关于ios - 如何使用 WKWebView 正确实现 didFailProvisionalNavigation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45131361/