2012-02-04 9 views
16

En una aplicación de iOS que estoy desarrollando, muestro un UIWebView para permitir al usuario actualizar su cuenta. La página contiene enlaces para mostrar al usuario otras informaciones, pero que mantenga el dedo en el enlace, un menú como este pop-up: enter image description herePrevenir iOS Webkit Long Presione en el enlace

Como se puede ver, se revela la URL de la página y la acción que se realizará, lo cual no quiero que el usuario vea, ya que no quiero que puedan copiar nada ya que deshabilité el menú "Copiar/Cortar/Pegar". ¿Cómo voy a deshabilitar este menú también?

Gracias por cualquier apuntador.

+0

¿Hay alguna buena razón por la que desea evitar que el usuario haga esto? Me parece que no molestarme sería más fácil. – millimoose

Respuesta

32

Creo que puede desactivar esa ventana emergente configurando the CSS -webkit-touch-callout property en none en el enlace. Haría esto editando el archivo HTML o CSS que está cargando, sin usar Objective-C.

16

Lo que quiere hacer, como Rob ya mencionado, es deshabilitar el menú contextual predeterminado de UIWebView. Se puede lograr mediante la adición de la siguiente línea a webViewDidFinishLoad:

[webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitTouchCallout='none';"]; 
13

Si desea tanto desactivar la ventana emergente Y selección del usuario de texto en su página HTML TODA, utilizar esto en el cuerpo de su página web o global css.

body { 
-webkit-touch-callout: none; 
-webkit-user-select: none; 
-khtml-user-select: none; 
-moz-user-select: none; 
-ms-user-select: none; 
user-select: none; 
} 
+0

Esto funciona. Pero si le preocupa que el usuario altere su CSS, utilice el enfoque programático sugerido por [esta otra respuesta] (http://stackoverflow.com/a/15538022/642706). Y busca preguntas y respuestas relacionadas/duplicadas. –

+3

Puede usar '* {' en lugar de 'cuerpo {' para cubrir todo. –

+2

Si quiere que sus entradas y áreas de texto funcionen, debe usar '*: not (input, textarea) {}' –

0

No hay necesidad de decirle al navegador que tiene un enlace y luego obligar a no comportarse como uno!

¡Solo elimine el href="void(0)" por completo!

Sus atributos ontouchend o onclick seguirán funcionando.


Si desea que el normal de azul/subrayado mirar de nuevo, se puede añadir este CSS:

a .originalLink { color: blue; text-decoration: underline; cursor: pointer; } 

Esto ahorra una gran cantidad de ciclos de CPU, especialmente cuando hay cientos de enlaces en la página, mientras el usuario es un desplazamiento suave.

También puede extender esto a las URL regulares utilizando la siguiente:

<a class="originalLink" onclick="location.href='http://mylink';">Real URL Link</a> 

Por supuesto su SEO es por la ventana, pero para una situación aplicación web para móviles específica esto puede ser crucial.

Happy coding!

Cuestiones relacionadas