將圖copy/pates到網頁上

copy/paste操作可以將文字貼到網頁的編輯欄位內,那圖的copy/paste?

copy/paste操作可以將文字貼到網頁的編輯欄位內,也可以copy/paste圖形到網頁的某個「編輯區」內? Sure. 以Chrome為例,程式碼如下 (忘了從哪裡學來的)

<html>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<style>
.inputArea {border:1px solid blue;padding:5px}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
<body>
<div id=inputArea class=inputArea contenteditable>
</div>

</body>
</html>
<script>
$(document).ready(function(){  

	$("#inputArea").on("paste",function(event){

		var items = (event.clipboardData ||   event.originalEvent.clipboardData).items;
		//console.log(JSON.stringify(items)); // will give you the mime types
		for (index in items) {
			var item = items[index];
			if (item.kind === 'file') {
				var blob = item.getAsFile();
				var reader = new FileReader();
				reader.onload = function(event){
				var URL_img= event.target.result;
					$T= $("<div><img src='" + URL_img + "'></div>")
					insertNodeAfterSelection($T.get(0))
					}; // data url!
				reader.readAsDataURL(blob);
				}
			}
		})
	
	})	// ready

	
function insertNodeAfterSelection(node) {
    var sel, range, html;
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            range = sel.getRangeAt(0);
            range.collapse(false);
            range.insertNode(node);
        }
    } else if (document.selection && document.selection.createRange) {
        range = document.selection.createRange();
        range.collapse(false);
        html = (node.nodeType == 3) ? node.data : node.outerHTML;
        range.pasteHTML(html);
    }
}	

	
</script>
  • DIV#inputArea 標了editable的屬性,使之成為一個可編輯區
  • javascript中定義了對#inputArea 的paste動作,因而可以達到圖copy/paste的效果。smaple如下
    隨便對某網頁的圖做copy image操作
    到自製的編輯區做paste動作

    便得到

要注意的是,這個paste動作,只能對單純的一個圖的copy/paste有效。像這個選取了混雜文字和圖的copy/paste,將只會把文字部分paste過去,圖並不會被處理到。解決的方式是,對於圖的部分就單獨做copy/paste。這是美中不足之處,但還可以接受。