如何从 didFailProvisionalNavigation 方法获取失败的 URL

Ber*_*rgP 5 iphone nsurl ios wkwebview

我正在尝试为我的 Web 视图显示错误消息,并且我需要知道不可用的 url,因此我实现了委托方法:

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error {
    [self.addressBar finishLoadingProgressAnimated:YES];
    NSLog(@"%@", webView.URL);
    [self showErrorPageForURL:error.userInfo[NSErrorFailingURLStringKey]];
}
Run Code Online (Sandbox Code Playgroud)

但是 NSErrorFailingURLStringKey 已被弃用,那么如何获取失败的 URL?WKNavigation的界面是空的。此时 webView.URL == nil 。

Shi*_*ama 6

斯威夫特 3 或斯威夫特 4

func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
    if error._domain == "WebKitErrorDomain" {
        if let info = error._userInfo as? [String: Any] {
            if let url = info["NSErrorFailingURLKey"] as? URL {

            }
            if let urlString = info["NSErrorFailingURLStringKey"] as? String {

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


gab*_*ler 2

您可以使用NSURLErrorFailingURLStringErrorKey来替换NSErrorFailingURLStringKey. 如果你跳到 Xcode 中的定义,你会发现下面的讨论。

该常量取代了 NSErrorFailingURLStringKey,后者在 Mac OS X 10.6 中已被弃用。为了向后兼容,两个常量都引用相同的值,但该符号名称具有更好的前缀。