Domanda

E 'la speciale areanything è necessario in HTML o in un callback UIWebView ai tag maniglia di ancoraggio con una href, o c'è qualcosa di speciale in un tag di ancoraggio con un link mailto nel href?

È stato utile?

Soluzione

Nel vostro delegato di UIWebView, fare:

- (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;
}

Altri suggerimenti

Ho notato che durante l'esecuzione nel simulatore iPhone, potrei cliccare su un link HTTP nella mia UIWebView e sarebbe aperto in Safari, ma quando ho cliccato su un link mailto non sarebbe successo niente. Ma quando ho schierato l'applicazione su un dispositivo vero e proprio, ha funzionato. Mi aspetto che il motivo è perché non v'è alcuna applicazione di posta sul simulatore, ma c'è Safari.

ho voluto sottolineare che questo non è probabilmente la soluzione migliore.

UIWebView ha una proprietà chiamata dataDetectorTypes - impostando questo a tutti o l'indirizzo dovrebbe risolvere il problema senza l'override del metodo di cui sopra:

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

Ma essere consapevoli che questo potrebbe non funzionare al simulatore - Ho provato con l'iPad 6.0 Simulator dove non funziona, anche se su un dispositivo iPad sta funzionando come un fascino

esempio di lavoro per la Swift 4: 3 casi sono trattati, espandere se necessario.

  1. mailto-collegamento funziona
  2. alcune URL si fa clic che si desidera aprire in Webview sé
  3. aprire tutti gli altri URL in 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
    }
    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top