Pergunta

Há algo especial que você precisa em html ou retornos de chamada em um UIWebView para lidar com tags âncora com um href, ou há algo especial sobre uma tag âncora com um link mailto no href?

Foi útil?

Solução

No delegado da sua UIWebview, faça:

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

Outras dicas

Percebi que ao rodar no simulador do iPhone, eu poderia clicar em um link HTTP no meu UIWebView e ele abriria no Safari, mas quando clicasse em um link mailto nada acontecia.Mas quando implantei o aplicativo em um dispositivo real, funcionou.Espero que o motivo seja porque não há aplicativo de e-mail no simulador, mas existe o Safari.

Eu queria observar que essa provavelmente não é a melhor solução.

A UIWebView possui uma propriedade chamada DatadeTecTortypes - definir isso para todos ou endereço deve resolver seu problema sem substituir o método mencionado acima:

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

Mas esteja ciente de que isso pode não funcionar no simulador - tentei com o simulador iPad 6.0, onde não está funcionando, embora em um dispositivo iPad esteja funcionando como um charme!

Exemplo de trabalho para os casos Swift 4: 3 são tratados, expanda conforme necessário.

  1. O Mailto-Link está funcionando
  2. Alguns URL são clicados que você deseja abrir no próprio WebView
  3. Abra todos os outros URLs no Mobile Safari

    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
    }
    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top