Pregunta

Es el especial areanything que necesita en html o devoluciones de llamada en un UIWebView a las etiquetas de anclaje con un mango href, o hay algo especial acerca de una etiqueta de ancla con un enlace de correo de la href?

¿Fue útil?

Solución

En su delegado de UIWebView, hacer:

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

Otros consejos

Me di cuenta de que cuando se ejecuta en el simulador de iPhone, pude hacer clic en un enlace HTTP en mi UIWebView y sería abrir en Safari, pero cuando hice clic en un enlace de correo no pasaba nada. Pero cuando desplegué la aplicación para un dispositivo real, funcionó. Espero que la razón es porque no hay una aplicación de correo electrónico en el simulador, pero hay Safari.

Yo quería tener en cuenta que esto probablemente no es la mejor solución.

UIWebView tiene una propiedad llamada dataDetectorTypes - establecer esto a todos o la dirección debería resolver su problema sin reemplazando el método mencionado anteriormente:

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

Sin embargo, tenga en cuenta que esto no funcione en el simulador - Lo he probado con el iPad 6.0 Simulador donde no está funcionando, aunque en un dispositivo iPad que funciona como un encanto

Ejemplo de trabajo para Swift 4: 3 casos se tratan, expanda según sea necesario.

  1. mailto-enlace funciona
  2. algunas URL se hace clic en que desea abrir en sí mismo Webview
  3. abrir todas las otras direcciones URL en 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
    }
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top