web-dev-qa-db-fra.com

Désactiver WKWebView pour ouvrir des liens pour rediriger des applications installées sur mon iPhone

Lorsque je recherche google et que je clique sur Etsy.com pour obtenir un exemple, WKWebView me redirige vers l'application Etsy installée sur mon iPhone . Comment désactiver ce comportement? Je veux que WKWebView me redirige vers le site mobile de etsy.com . J'utilise Swift.

13
gal

Malheureusement, WKWebView n'envoie pas d'URL avec des schémas personnalisés à votre application pour les gérer automatiquement. 

Si vous essayez ceci sans traitement spécial, il semblera que votre vue Web se bloque après que l'utilisateur se soit authentifié auprès du service tiers et vous ne recevrez jamais votre rappel. Vous pouvez essayer d’utiliser un URI de redirection avec le schéma standard http ou https, mais WKWebView essaiera simplement de le charger, plutôt que de le diriger hors de la vue Web vers votre application native à gérer.

Afin de gérer la redirection, vous devez implémenter decidePolicyForNavigationAction dans la WebPolicyDelegate de votre WKWebView pour détecter le schéma personnalisé URL et le diriger vers votre application pour qu'il soit géré:

func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: ((WKNavigationActionPolicy) -> Void)) {
        print("webView:\(webView) decidePolicyForNavigationAction:\(navigationAction) decisionHandler:\(decisionHandler)")

        let app = UIApplication.sharedApplication()
        let url = navigationAction.request.URL
        let myScheme: NSString = "https"
        if (url!.scheme == myScheme) && app.canOpenURL(url!) {
            print("redirect detected..")
            // intercepting redirect, do whatever you want
            app.openURL(url!) // open the original url
            decisionHandler(.Cancel)
            return
        }

        decisionHandler(.Allow)
    }

Vous pouvez trouver des informations détaillées ici

6

j'ai installé l'application Etsy et confirmé que la recherche de "etsy" dans Safari et la sélection du premier résultat (etsy.com) lanceraient l'application Etsy.

j'ai créé un test "Single View Application" dans Xcode et j'ai simplement ajouté les lignes ci-dessous à viewDidLoad de ViewController:

 override func viewDidLoad() {
     super.viewDidLoad()

     let webView = WKWebView(frame:view.bounds, configuration: WKWebViewConfiguration())
     view.addSubview(webView)
     webView.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.com")!))
}

après avoir recherché etsy et cliqué sur le premier résultat, cela me prend sur etsy.com dans mon application de test (ne passe pas à l'application Etsy).

avez-vous fait autre chose dans votre code qui pourrait amener WKWebView à autoriser les redirections?

0
Casey