cette question est identique à la suivante: WKWebView catch HTTP error codes ; malheureusement, les méthodes dans Obj-C ne sont pas applicables à Swift 4, donc le WKNavigationResponse.response
cité n'est plus de type NSHTTPURLResponse
donc il n'a pas le code d'état http.
Mais le problème est toujours le même: j'ai besoin d'obtenir le code d'état http de la réponse pour détecter si la page attendue est chargée ou non.
Veuillez noter que webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error)
délégué n'est pas appelé en cas de 404
Mais uniquement en cas de problème de réseau (c'est-à-dire serveur hors ligne); la func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
est appelée à la place.
Merci beaucoup pour vos réponses.
À l'aide d'un WKNavigationDelegate
sur le WKWebView
, vous pouvez obtenir le code d'état de la réponse à chaque réception.
func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse,
decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
if let response = navigationResponse.response as? HTTPURLResponse {
if response.statusCode == 401 {
// ...
}
}
decisionHandler(.allow)
}
HTTPURLResponse
est une sous-classe de URLResponse
. La méthode Swift de "conversion descendante conditionnelle" est la conversion conditionnelle as?
, cela peut être combiné avec une liaison conditionnelle 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)
}