ios - 如何使用 WKWebView 正确实现 didFailProvisionalNavigation?

标签 ios objective-c 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 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/

相关文章:

ios - Safari Web Inspector 不适用于 iOS 模拟器

ios - 提示 iOS 用户选择要由应用程序处理的 JPEG

iphone - NSArray、Plist、NSDictionary 或存储数据的推荐

iphone - iOS GameCenter、AVAsset 和音频流

ios - 如何让WKWebView只有在全部加载完毕后才渲染内容?

ios - if 语句中的 NSCountedSet

iphone - 如何在 iPhone 中使用移动和缩放 UIImagePickerController?

ios - 在 iOS 7 中删除 UIButton 上的下划线

ios - Google 身份验证 - 用户代理在 WebView (Nylas api) 上给出错误

html - 有没有办法 catch "Received an unexpected URL from the web process:"