Comment capturer l'URL de redirection lors de l'utilisation de WKWebView comme si une page Web redirige vers une autre page lors de la soumission du nom d'utilisateur et du mot de passe ou d'autres données. J'ai besoin de capturer l'URL redirigée. Existe-t-il une méthode dans WKNavigationDelegate pour remplacer?
Utilisez cette méthode WKNavigationDelegate
public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Swift.Void)
{
if(navigationAction.navigationType == .other)
{
if navigationAction.request.url != nil
{
//do what you need with url
//self.delegate?.openURL(url: navigationAction.request.url!)
}
decisionHandler(.cancel)
return
}
decisionHandler(.allow)
}
J'espère que cela t'aides
(Cela répond à la question un peu plus générale de savoir comment détecter une redirection d'URL dans WKWebView, qui est la recherche qui m'a conduit à cette page.)
Réponse courte
Utilisez la fonction webView(_:didReceiveServerRedirectForProvisionalNavigation:)
de WKNavigationDelegate
et examinez la propriété WKWebView
de URL
.
Réponse plus longue
Il y a quelques endroits où vous pouvez détecter une redirection côté serveur.
Sur iOS 10.3.3 et iOS 11.0, la séquence d'événements que j'observe lors du chargement d'une URL qui est redirigée par le serveur est:
La fonction WKNavigationDelegate
webView(_:decidePolicyFor:decisionHandler:)
est appelée pour la demande d'URL d'origine. La propriété WKWebView
de URL
est définie sur l'URL d'origine.
La fonction WKNavigationDelegate
webView(_:didStartProvisionalNavigation:)
est appelée pour la demande d'URL d'origine. La propriété WKWebView
de URL
est définie sur l'URL d'origine.
La propriété WKWebView
de URL
est mise à jour par WebKit vers l'URL de redirection. (Vous ne le saurez que si vous observez la valeur-clé de la propriété.)
La fonction WKNavigationDelegate
webView(_:decidePolicyFor:decisionHandler:)
est appelée pour la demande d'URL redirigée. La propriété WKWebView
de URL
est alors l'URL de redirection.
La fonction WKNavigationDelegate
webView(_:didReceiveServerRedirectForProvisionalNavigation:)
est appelée. La propriété WKWebView
de URL
est l'URL de redirection.
(Remarque: sur le simulateur iOS 11.0, j'ai vu les étapes 3 et 4 inversées, avec la propriété URL
inchangée dans webView(_:decidePolicyFor:decisionHandler:)
, ce qui semble en fait être un ordre raisonnable, mais je n'ai pas observé ceci sur un appareil.)
Il semble que la webView(_:didReceiveServerRedirectForProvisionalNavigation:)
soit construite explicitement dans le but de détecter les redirections, donc c'est probablement l'option préférée, bien que la redirection puisse éventuellement être déduite aux étapes 3 ou 4 mais seulement si vous pouvez être sûr qu'il y en a aucune autre cause de changement de navigation.