2009-07-17 19 views
7

Estoy tratando de escribir una función de Javascript para editar el contenido del portapapeles antes de pegar. En este momento tengo el evento enlazado 'pegar' para funcionar a través de JQuery.Obtener datos del portapapeles

$(this.elementDoc).bind('paste', function(event){ 
    self.OnPaste(event); 
}); 

Pero eso no es importante. Ahora me gustaría obtener datos del portapapeles, pero no puedo averiguar cómo. Me alegraría por cada pista.

Respuesta

4

Esto es un toughie. Si recuerdo correctamente, IE permite el acceso al portapapeles, pero por defecto Firefox no lo hace debido a problemas de seguridad. Tuve que hacer esto para un proyecto en el que estaba trabajando y tuve que usar un pequeño archivo SWF para copiar.

http://www.jeffothy.com/weblog/clipboard-copy/

+0

Por lo que puedo decir, esta solución permite copiar al portapapeles, pero no obtener desde el portapapeles. Por lo tanto, esto no es en absoluto una solución a la pregunta propuesta: no sé por qué se marcó así (a menos que el PO estuviera confundido). Si estoy equivocado, por favor explique! – bgmCoder

1

Aquí es cómo conseguir que a partir de IE o Chrome. Primero evita que la pasta real suceda, luego realiza una comprobación de características y luego establece el texto variable en el texto del portapapeles. Con eso puedes manipular el texto y luego establecerlo como el valor de la entrada/elemento al que pegarás, o cualquier otra cosa que quieras hacer con él.

//get clipboard text 
event.preventDefault(); 
var text = null; 
if (window.clipboardData) 
    text = window.clipboardData.getData("Text"); 
else if (event.originalEvent && event.originalEvent.clipboardData) 
    text = event.originalEvent.clipboardData.getData("Text"); 

//manipulate the text 
text = '..do stuff with it..'; 
//set the text 
$(this).val(text); 
2

El clipboardData puede contener datos en varios formatos posibles. Es posible que un programa agregue datos del portapapeles en múltiples formatos. Para ver los formatos, mira a través del clipboardData.types.

A menudo los datos del portapapeles contienen texto sin formato, y el primer tipo enumerado en types será el tipo MIME "text/plain". Si copia texto de un navegador, verá dos tipos en la lista: "text/plain" y "text/html". Dependiendo de la cadena que pase al getData, puede tomar el texto sin formato o el html. Parece que "texto" es la abreviatura de "texto/texto simple" y "url" es la abreviatura de "texto/lista uri".

element.addEventListener('paste', function(event) { 
    var cb = event.clipboardData 
    if(cb.types.indexOf("text/html") != -1) {  // contains html 
    var pastedContent = cb.getData("text/html") 
    } else if(cb.types.indexOf("text/html") != -1) { // contains text 
    var pastedContent = cb.getData("text/html") 
    } else { 
    var pastedContent = cb.getData(cb.types[0]) // get whatever it has 
    } 

    // do something with pastedContent 
}) 

Para obtener más información sobre cómo utilizar clipboardData.getData, ver the ugly spec.

+0

¿Puedes explicar por qué debería funcionar esto? –

+0

Agregó un montón de explicaciones –

Cuestiones relacionadas