Tengo una aplicación donde cargo contenido a ay UIWebView
presento esto. No puedo deshabilitar la interacción del usuario por completo porque quiero que el usuario pueda hacer clic en los enlaces. Solo necesito deshabilitar la selección de usuario. Encontré en algún lugar de Internet que puedes usar:
document.body.style.webkitUserSelect='none';
Traté de insertar esto como
[self.contentView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitUserSelect='none';"];
en webViewDidFinishLoad:
Sin embargo, no funciona. Todavía puedo seleccionar y copiar texto dentro de WebView.
¿Alguna idea de lo que podría estar yendo mal?
Actualización: esto solo parece suceder a partir de iOS 4.3
UIWebView
usando una categoría.canPerformAction
no deshabilita el menú Cortar, Copiar, Pegar. Y Seleccionar, Seleccionar todo el menú. ¿Cómo arreglar esto?-webkit-touch-callout
yremoveAllRanges
romper la entrada del usuario. No se pueden usar todos los métodos proporcionados :(*
el ámbito global es que detiene la entrada del usuario en formularios web. Descubrí que obtuve mejores resultados al colocarlos dentro de labody
etiqueta.Puedo confirmar que el siguiente código funciona en iOS 5.0 - 8.0.
También funciona para iOS 9 y versiones posteriores. Aquí está el código rápido:
fuente
Estoy usando esta técnica en una aplicación web para Android / iPhone (empaquetada con Trigger.IO) y descubrí que solo funcionaría con la sintaxis de encadenamiento para la pseudo-clase: not ():
fuente
*:not(input,textarea) {-webkit-touch-callout: none; -webkit-user-select: none;}
, pero eso no me sirvió. ¡Gracias!Me gusta la solución WrightsCS, pero la usaré para que los usuarios puedan seguir copiando, pegando y seleccionando acciones en las entradas.
fuente
No estoy seguro de cómo se realiza la configuración, pero ¿por qué no borra el PasteBoard cuando se llama a viewWillDisappear? Tal vez algo así como en su aplicaciónDelegate.m:
esto asegurará que cualquier información que el usuario haya copiado, no podrá pegarla fuera de la aplicación.
Además, como dijo Engin, puede anular el método canPerformSelector en la clase de controlador que contiene uiwebview.
fuente
La respuesta de TPoschel es actual pero en mi caso el orden fue importante.
fuente
Puedo confirmar que esto definitivamente funcionará para ti.
Si desea deshabilitar solo la etiqueta del botón de anclaje, use esto.
fuente
¡Resultado del gran trabajo de una semana! Todas las demás respuestas son incorrectas si desea guardar eventos del mouse y la entrada del usuario en muchas páginas.
1) Método Swizzle (por la biblioteca rentzsch / jrswizzle ):
NSObject + myCanPerformAction.h:
NSObject + myCanPerformAction.m:
2) Coloque UIWebView en UIView y agregue un código:
Y éste:
fuente
Simplemente agregue este código a su viewDidLoad (). El usuario puede hacer clic en el enlace pero no puede copiar el contenido.
fuente
La primera solución dada funcionó perfectamente para mí ... hasta que cargué un .pdf en mi UIWebView.
Cargar un archivo .doc funcionó perfectamente, pero cargar un .pdf resultó en que la siguiente línea de código ya no tenía el efecto deseado y el menú copiar / definir apareció nuevamente con un toque prolongado por parte del usuario.
Después de otro tirón de cabello, encontré esta respuesta aquí de Johnny Rockex y funcionó como un campeón. UIWebView sin copiar / pegar cuando se muestran archivos PDF
¡Muchas gracias a él por esta solución fácil de implementar y genial!
fuente
Para mí, lo había pensado, en busca de las imágenes
NSData
deUIWebView
porLongPressGesture
.Pero la Lupa y Copiar / Pegar / Cortar siempre ocurren antes de que se ejecute mi función.
Y encontré esto:
Significa que la Lupa y Copiar / Pegar / Cortar necesitan 0,5 segundos para ejecutarse, por lo que si su función se puede ejecutar en 0,49 segundos, ¡HECHO!
fuente
Utilice la función de interacción de vista web
Esto funciona para mi
PD: recuerde habilitar la interacción cuando desee que el usuario pueda interactuar nuevamente con la vista web
fuente