web-dev-qa-db-fra.com

Capturer l'URL de redirection dans wkwebview dans iOS

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?

18
Prabu Raj

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

18
Reinier Melian

(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:

  1. La fonction WKNavigationDelegatewebView(_: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.

  2. La fonction WKNavigationDelegatewebView(_: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.

  3. 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é.)

  4. La fonction WKNavigationDelegatewebView(_:decidePolicyFor:decisionHandler:) est appelée pour la demande d'URL redirigée. La propriété WKWebView de URL est alors l'URL de redirection.

  5. La fonction WKNavigationDelegatewebView(_: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.

19
user2067021