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

Fra*_* G. 6 ios swift wkwebview

这个问题与以下内容相同:WKWebView捕获HTTP错误代码 ; 遗憾的是,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!)被改为调用.

非常感谢你的回答.

小智 14

使用a 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)
}
Run Code Online (Sandbox Code Playgroud)