2012-02-10 17 views
6

Me gustaría activar el evento onpaste en el elemento para recuperar datos en el portapapeles (quiero verificar si la imagen existe en el portapapeles y subirla al servidor). Funciona perfecto en Chrome:Cómo obtener datos del portapapeles en Firefox

$('#textarea')[0].onpaste = function(event) 
{ 
    var items = event.clipboardData.items; 

    if (items.length) 
    { 
     var blob = items[0].getAsFile(); 
     var fr = new FileReader(); 

     fr.onload = function(e) 
     { 
      alert('got it!'); 
     } 

     fr.readAsDataURL(blob); 
    } 
} 

no funciona en Firefox: event.clipboardData.items no existe. ¿Tienes alguna idea de cómo recuperar el evento onpaste en element?

+0

Firefox no le permite acceder al portapapeles por razones de seguridad. De todos modos su pregunta es un duplicado de http://stackoverflow.com/questions/127040/copy-put-text-on-the-clipboard-with-firefox-safari-and-chrome –

Respuesta

0

Claro que puedo. En este ejemplo puedo recuperar la imagen desde el portapapeles después de usar Ctrl + V:

<div id="foo" style="width: 200px; height: 200px" contenteditable="true">Paste here!</div> 
$('#foo')[0].onpaste = function(e) 
{     
    setTimeout(function() 
    { 
     var blob = $('#foo img').attr('src'); 


     $.post('/upload/image', {'data': blob}, function(result) 
     { 


     }, 'json'); 

    }, 200); 
} 

Funciona con <div> elemento que tiene contenteditable atributo, pero no funciona con <textarea>

P. S. Perdón por responder mi propia pregunta, pero este fragmento de código podría ayudar a alguien.

+0

Hola, necesito tu ayuda. Su solución es correcta, pero tengo una duda si contenteditable div ya contiene 2 imágenes y cuando Crtl + V, ¿se cargan 3 imágenes en el servidor? –

+0

Bueno ... el código anterior carga todo lo que está en el atributo 'src'. – Bald

+0

lo sé subir el valor del atributo src, pero quiero saber si hay 3 src ya disponibles en el div y luego subir un total de 4 src (en el cual 3 ya está allí y el 4 está recién pegado) ?? –

2

Es necesario crear un div contenteditable que contendrá la imagen de pasta de

var pasteCatcher = $('<div/>',{'id':'container'}); 
$('body').append(pasteCatcher); 
var pasteCatcher = document.getElementById('container'); 
       pasteCatcher.setAttribute("contenteditable", ""); 

entonces tienes que esperar para el evento de pasta y procesarlo

window.addEventListener("paste",processEvent); 
function processEvent(e) { 
//some functionality 
} 

también escribir el código para agarrar el datos de imagen de div contenida y envíelos al servidor.

Cuestiones relacionadas