2012-02-10 2 views
6

vorrei innescare evento onpaste sull'elemento per recuperare i dati in clipboard (voglio verificare se l'immagine esiste in appunti e caricarlo nel server). Esso funziona perfettamente su Chrome:Come ottenere i dati dagli appunti in 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); 
    } 
} 

non funziona su Firefox: event.clipboardData.items non esiste. Hai idea di come recuperare l'evento onpaste in elemento?

+0

Firefox non consente di accedere agli Appunti per motivi di sicurezza. In ogni caso la tua domanda è un duplicato di http://stackoverflow.com/questions/127040/copy-put-text-on-the-clipboard-with-firefox-safari-and-chrome –

risposta

0

Certo che posso. In questo esempio a recuperare un'immagine da appunti dopo aver utilizzato 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); 
} 

Funziona con <div> elemento che ha attributo contenteditable, ma non funziona con <textarea>

P.S. Ci scusiamo per aver risposto alla mia domanda, ma questo pezzo di codice potrebbe aiutare qualcuno.

+0

Hey ho bisogno del tuo aiuto. La tua soluzione è corretta ma ho un dubbio se il div contenteditable contiene già 2 immagini e quando ho Crtl + V carica quindi 3 immagini sul server? –

+0

Bene ... il codice sopra carica tutto ciò che è nell'attributo 'src'. – Bald

+0

so che carica il valore dell'attributo src, ma voglio sapere se ci sono 3 src già disponibili nel div, quindi carica in totale 4 src (in cui 3 è già lì e il 4 è stato appena incollato) ?? –

2

È necessario creare un div contenteditable che conterrà l'immagine sulla pasta

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

allora avete bisogno di aspettare per pasta evento ed elaborarlo

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

scrivere anche il codice per afferrare la dati di immagine dal div contenteditable e inviarlo al server.