Question

est le dont vous avez besoin spécial areanything html ou dans un UIWebView Callbacks pour gérer les balises d'ancrage avec un href, ou est-il quelque chose de spécial au sujet d'une balise d'ancrage avec un lien mailto dans le href?

Était-ce utile?

La solution

Dans le délégué de votre UIWebView, faites:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if ([[[request URL] scheme] isEqual:@"mailto"]) {
        [[UIApplication sharedApplication] openURL:[request URL]];
        return NO;
    }
    return YES;
}

Autres conseils

J'ai remarqué que lors de l'exécution dans le simulateur d'iPhone, je peux cliquer sur un lien HTTP dans mon UIWebView et ouvrirait dans Safari, mais quand je clique sur un lien serait rien mailto arriver. Mais quand je l'application à déployé un dispositif réel, cela a fonctionné. Je pense que la raison est parce qu'il n'y a pas d'application de messagerie sur le simulateur, mais il est Safari.

Je voulais souligner que c'est probablement pas la meilleure solution.

UIWebView a une propriété appelée dataDetectorTypes - cette option à tout ou une adresse devrait résoudre votre problème sans redéfinissant la méthode mentionnée ci-dessus:

myWebView.dataDetectorTypes = UIDataDetectorTypeAll; //or UIDataDetectorTypeAddress etc..

Mais il faut savoir que cela pourrait ne pas fonctionner sur le simulateur - Je l'ai essayé avec l'iPad 6.0 Simulator où il ne fonctionne pas bien sur un appareil iPad, il fonctionne comme un charme

Exemple de travail pour Swift 4: 3 cas sont traités, développez au besoin.

  1. mailto-lien fonctionne
  2. une URL est cliqué que vous souhaitez ouvrir dans Webview lui-même
  3. ouvrir toutes les autres URL dans Safari mobile

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    
    if let url = navigationAction.request.url {
        if (url.scheme == "mailto") {
            // mailto: link is clicked
            UIApplication.shared.open(url)
            decisionHandler(.cancel)
            return
        }
        if (url.absoluteString.contains("www.example.com/webviewURL")) {
            // Load this stuff in WebView
            decisionHandler(.allow)
            return
        } else {
            // open any other URL in mobile Safari
            UIApplication.shared.open(url)
            decisionHandler(.cancel)
            return
        }
    }
    
    decisionHandler(.cancel)
    return
    }
    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top