2014-09-29 91 views
5

我最初的目標是從剪貼板上粘貼圖像。但是我遇到了粘貼事件的麻煩。JavaScript粘貼事件在Chrome瀏覽器中正常工作,但不是Firefox

在的jsfiddle,我在那裏再現了問題,HTML只包含一個div:

<div style="width: 200px; height: 200px; background: grey" id="pasteTarget" > </div> 

中的JavaScript首先結合我的功能handlePaste()的糊狀事件。

window.onload = function() { 
    //adding paste event listener on the div 
    document.getElementById("pasteTarget"). 
     addEventListener("paste", handlePaste); 
}; 

當用戶按下Ctrl + V或在瀏覽器的菜單中選擇「粘貼」時,應該調用此函數。

function handlePaste(e) { 
    alert("I'm in handlePaste");  
    for (var i = 0 ; i < e.clipboardData.items.length ; i++) { 
     var item = e.clipboardData.items[i]; 
     console.log("Item: " + item.type); 
     alert(item.type); 
    } 
} 

重要提示:該函數訪問e.clipboardData以獲取剪貼板的內容。例如,如果按下PrtScrn鍵,然後按Ctrl + V,則將打印屏幕圖像發送到handlePaste方法。 當它工作正常時,最後的警報顯示「image/png」。

Chrome v37:JsFiddle工作正常。 Firefox v32:不調用handlePaste()方法,第一個警報不會彈出。

的代碼的jsfiddle:http://jsfiddle.net/demeylau/ke44bufm/1/

+0

我懷疑你可以將任何東西粘貼到不可編輯的元素 – ovi 2014-09-29 09:55:31

+0

@Ovi - 它會在Chrome中工作,因爲Chrome中有一種錯誤? – 2014-09-29 14:17:52

回答

2

據我所知,你將不得不爲每個瀏覽器代理單獨處理的粘貼。 約書亞格羅斯涵蓋了很多這篇文章中的paste事件的錯綜複雜的:Paste Wasteland

火狐喜歡更加鈍,但它可以通過處理剪貼板數據作爲BLOB讀取圖像數據作爲文件。 (請參閱Gross的文章中的後記) 這是在瀏覽器中以幾乎不同的方式處理操作系統事件的非遺漏代碼,簡潔地總結了爲什麼我們在WebAPI等事物中標準化了大多數新功能。 我希望這可以幫助。

+0

還有一個關於這個問題的報道(https://bugzilla.mozilla.org/show_bug.cgi?id=439189)。但它仍然沒有解決,最近的更新是在2014年。 – muffir 2015-04-23 11:14:34

相關問題