Impedir que UIWebView muestre UIPopoverController para enlaces de tel

Estoy trabajando en una aplicación de iPad con UIWebView (Despliegue objective iOS 5.0+).

Mi UIWebView no debe hacer nada cuando el usuario selecciona correos electrónicos, direcciones y numbers de teléfono.

Tengo un problema con los numbers de teléfono . Si la página html contiene enlaces como este: <a href="tel:555-555-5555">555-555-5555</a> cuando el usuario selecciona este enlace aparece UIPopoverController (Agregar a Contactos, Copiar).

Lo he probado a continuación:

  • Desactive la detección en el file xib para UIWebView
  • webView.dataDetectorTypes = UIDataDetectorTypeNone;
  • llamar a JS – document.documentElement.style.webkitTouchCallout = "none";

El método de delegado de UIWebView shouldStartLoadWithRequest no funciona para los numbers de teléfono en el iPad, pero funciona bien en el iPhone .

¿Tienes alguna idea?

La razón por la cual el enlace del número de teléfono en particular no se deshabilita es porque no es un número de teléfono detectado , es simplemente un antiguo enlace <a href=foo> que tiene un enlace telefónico para su atributo href . Configurar los dataDetectorTypes como está haciendo es la forma correcta de deshabilitar la detección de numbers de teléfono. Entonces, si tiene numbers de teléfono que aparecen en el text de la página web en alguna parte y desea evitar que se conviertan en enlaces, siga usando webView.dataDetectorTypes = UIDataDetectorTypeNone; .

Si desea desactivar todos los enlaces que parecen numbers de teléfono, necesitará ejecutar un JavaScript después de que la página haya terminado de cargarse. En el método webViewDidFinishLoad del delegado de webViewDidFinishLoad , use [webView stringByEvaluatingJavaScriptFromString:] y pase JavaScript para replace los enlaces infractores. Aquí hay un ejemplo de JavaScript que replaceá todos sus enlaces de estilo tel con elementos de text que muestren el número de teléfono. Es posible que desee algo ligeramente diferente, o tal vez solo desea eliminar los enlaces del DOM por completo.

 var links = document.getElementsByTagName('a'); for (var j = 0; j < links.length; j++) { var href=links[j].getAttribute('href'); var prefix = href.substring(0,4); if (prefix == "tel:") { var parentNode = links[j].parentNode; var replacementNode = document.createTextNode(href.substring(prefix.length, href.length)); parentNode.replaceChild(replacementNode, links[j]); } }