如何使用WKWebView正确实现didFailProvisionalNavigation?
我正在创建一个Web浏览器,并且像其他所有Web浏览器一样,我想告知用户网页加载失败时发生的错误。
目前,我正在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错误-999)
我不喜欢这种方法有两个原因:
- 错误消息显示一些技术内容“NSURL”,但我可以忽略它。
- 最重要的是,大多数情况下,当显示上述错误时,网页是完全可用的,但由于这是一个didFailProvisionalNavigation错误,我必须禁用页面使用,而是出现错误。
我不知道可能发生的其他小错误,不应该像我处理它们那样处理。 不幸的是,我不知道如何区分主要错误,如“连接似乎脱机”和轻微错误,如“操作无法完成”。
处理导航故障的标准方法是什么?
代替
webView(_:didFailProvisionalNavigation:withError:)
你为什么不用这个?
webView(_:didFail:withError:)
似乎只有在出现阻止网站显示内容的错误时才会调用,而不是在页面已经呈现并尝试加载下一页时。
我也需要使用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 } }