WKWebView使用Swift 4捕获HTTP错误代码

时间:2018-03-16 13:21:19

标签: ios swift wkwebview

此问题与以下内容相同:WKWebView catch HTTP error codes;遗憾的是,Obj-C中的方法不适用于Swift 4,因此引用的WKNavigationResponse.response不再是NSHTTPURLResponse类型,因此它没有http状态代码。

但问题仍然是相同的:我需要获取答案的http状态代码,以检测是否加载了预期的页面。

请注意,在webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error)的情况下不会调用404代理,但仅在出现网络问题时(即服务器脱机);而是调用func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)

非常感谢您的回答。

2 个答案:

答案 0 :(得分:10)

使用WKNavigationDelegate上的WKWebView,您可以在每次收到回复时从响应中获取状态代码。

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse,
             decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {

    if let response = navigationResponse.response as? HTTPURLResponse {
        if response.statusCode == 401 {
            // ...
        }
    }
    decisionHandler(.allow)
}

答案 1 :(得分:0)

HTTPURLResponseURLResponse的子类。 “条件向下转换”的Swift方式是条件强制转换as?,可以与条件绑定if let结合使用:

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse,
             decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {

    if let response = navigationResponse.response as? HTTPURLResponse {
        if response.statusCode == 401 {
            // ...
        }
    }
    decisionHandler(.allow)
}