2012-02-10 30 views
6

我想觸發元素上的onpaste事件來檢索剪貼板中的數據(我想檢查圖像是否存在於剪貼板中並將其上載到服務器中)。它適用於Chrome瀏覽器:如何從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); 
    } 
} 

不適用於Firefox:event.clipboardData.items不存在。你有什麼想法如何檢測元素中的粘貼事件?

+0

由於安全原因,Firefox不允許您訪問剪貼板。無論如何,你的問題是重複http://stackoverflow.com/questions/127040/copy-put-text-on-the-clipboard-with-firefox-safari-and-chrome – 2012-02-10 21:36:45

回答

0

相信我能。在這個例子中,我使用後檢索圖像從剪貼板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); 
} 

它的工作原理與具有contenteditable屬性<div>元素,但不與<textarea>

P.S.工作很抱歉回答我自己的問題,但這段代碼可能有助於某人。

+0

嘿,我需要你的幫助。您的解決方案是正確的,但我有一個疑問,如果contenteditable div已經包含2個圖像,當我Crtl + V然後它上傳共3張圖片在服務器上? – 2015-07-07 06:31:34

+0

呃......上面的代碼上傳了'src'屬性中的所有內容。 – Bald 2015-07-07 10:35:16

+0

我知道它上傳了src屬性值,但是我想知道是否有3個src已經在div中可用,那麼它總共上傳了4個src(其中3個已經存在,第四個新粘貼)? – 2015-07-07 10:54:13

2

你需要創建一個CONTENTEDITABLE格將舉行上粘貼圖像

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

,那麼你需要等待粘貼事件並對其進行處理

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

而且寫代碼搶來自contenteditable div的圖像數據並將其發送到服務器。