2011-11-19 15 views
23

dado un contenido editable div. ¿Cómo puedo detectar un evento pegar, evitar que se inserte el pegado, así que puedo interceptar y desinfectar el pegado para incluir solo texto?Detecta un evento de pegar en un contenteditable

Además, no quiero perder el enfoque después de que se haya completado la operación de pegar + desinfectar.

Ideas? Gracias

+1

¿Cuál sería útil sería un fondo que captura el evento pegar antes de que ocurra, desinfecta y luego inyecta el contenido seguro en el contenido editable sin perder la posición del cursor. Ideas? –

+1

IE, Safari y Chrome permiten acceder a los datos en el portapapeles, pero tendrás que inventar un gran dolor de cabeza para solucionar Firefox. Mucho más fácil, si es factible, sería simplemente permitir el pegado, y luego desinfectar el contenido del elemento completo después del hecho. Funcionaría eso? – sdleihssirhc

+0

Hay una forma chistosa de hacer esto que he publicado antes: http://stackoverflow.com/questions/2176861/javascript-get-clipboard-data-on-paste-event-cross-browser/2177059#2177059, http : //stackoverflow.com/questions/4365833/how-can-i-get-the-text-that-is-going-to-be-pasted-in-my-html-text-editor/4365862#4365862 –

Respuesta

20

ACTUALIZACIÓN:

Todos los navegadores más importantes ahora le permiten acceder a los datos del portapapeles en un evento paste. Consulte Nico Burns's answer para ver un ejemplo en el navegador más nuevo y también consulte Tim Down's answer si necesita admitir navegadores más antiguos.


Puede detectar el evento onPaste en el div para detectar la pasta. Si solo desea deshabilitar el pegado, puede llamar al event.preventDefault() desde ese oyente.

Para capturar el contenido pegado, sin embargo, es un poco más difícil ya que el evento onPaste no le da acceso al contenido pegado. La forma habitual de manejar esto es para hacer lo siguiente desde el controlador onPaste evento:

  • crear un div maniquí y colocarlo fuera de los límites de la ventana así que no es visible para los visitantes
  • mover el foco a este div
  • llamada de un método usando un desinfectante setTimeout(sanitize, 0)

y de su método de desinfección:

  • encontrar el div maniquí y obtener su contenido
  • desinfectar el HTML y quitar el div
  • mover el foco de nuevo a la div originales
  • insertar el contenido desinfectados en el div originales
+1

The El evento 'paste' es demasiado tarde para hacer este tipo de redirección en algunos navegadores, pero la idea general funciona. –

+2

Aquí hay otra solución muy popular que se ha probado en el navegador cruzado http://stackoverflow.com/questions/2176861/javascript-get-clipboard-data-on-paste-event-cross-browser – yoshyosh

Cuestiones relacionadas