2012-02-10 15 views
6

Chciałbym wywołać zdarzenie onpaste na elemencie w celu pobrania danych w schowku (chcę sprawdzić, czy obraz istnieje w schowku i załadować go do serwera). Działa on idealny na Chrome:Jak uzyskać dane ze schowka w 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); 
    } 
} 

Nie działa na Firefox: event.clipboardData.items nie istnieje. Czy masz pojęcie, w jaki sposób pobrać element onpaste w elemencie?

+0

Firefox nie pozwala na dostęp do schowka ze względów bezpieczeństwa. W każdym razie twoje pytanie jest duplikatem http://stackoverflow.com/questions/127040/copy-put-text-on-the-clipboard-with-firefox-safari-and-chrome –

Odpowiedz

0

Oczywiście mogę. W tym przykładzie odzyskać obraz ze schowka po użyciu 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); 
} 

Współpracuje z <div> elementu, który ma atrybut contenteditable, ale nie działa z <textarea>

PS: Przepraszamy za odpowiedź na moje własne pytanie, ale ten fragment kodu może pomóc komuś.

+0

Hej, potrzebuję twojej pomocy. Twoje rozwiązanie jest poprawne, ale mam jedną wątpliwość, czy contenteditable div zawiera już 2 obrazy, a kiedy w Crtl + V przesyła 3 obrazy na serwer? –

+0

No cóż ... powyższy kod ładuje wszystko, co ma atrybut 'src'. – Bald

+0

Wiem, że wysyłam wartość atrybutu src, ale chcę wiedzieć, czy w div jest już 3 src, a następnie przesłać sumarycznie 4 src (w którym 3 już jest, a 4. jest nowo wklejone)? –

2

Musisz utworzyć jeden contenteditable div, które będą trzymać obraz na pastę

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

następnie trzeba czekać na pasty zdarzenia i procesu to

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

także napisać kod, aby pobrać dane obrazu z contenteditable div i wyślij je na serwer.

Powiązane problemy