此问题与以下内容相同: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!)
。
非常感谢您的回答。
答案 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)
HTTPURLResponse
是URLResponse
的子类。 “条件向下转换”的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)
}