2014-11-03 16 views
6

Sử dụng jquery, tôi có thể phát hiện khi người dùng sao chép cái gì đó (như văn bản) với ctrl-c hoặc thông qua menu ngữ cảnh:Tôi làm cách nào để phát hiện sự kiện trình duyệt "sao chép hình ảnh"?

$(document).on('copy',function(e){$('body').prepend('copy event <br>');}); 

Tuy nhiên, sự kiện này dường như không gây ra khi một hình ảnh được sao chép. Tôi có thể phát hiện hình ảnh bằng cách nào? Cụ thể là tôi muốn phát hiện sao chép từ phần tử <canvas>, nhưng bất kỳ <img> nào cũng nên làm điểm bắt đầu để hiểu vấn đề này.

thử nghiệm kịch bản: http://jsfiddle.net/jm23xe8w/

+0

Điều này có thể giúp bạn: http://www.quirksmode.org/dom/events/cutcopypaste.html – gurudeb

+0

Mục tiêu của bạn là bắt sự kiện này là gì? –

+0

@AlmaTôi cần người dùng sao chép hình ảnh vào khay nhớ tạm của họ, sau đó quay lại trình duyệt - điều này sẽ cho phép sử dụng dữ liệu pixel từ hình ảnh gốc hình ảnh (không có rủi ro bảo mật vì hành động của người dùng rõ ràng để thực hiện). Vì vậy, khi họ bắt đầu một sự kiện sao chép, tôi sẽ kích hoạt chức năng dán để làm cho nó trực quan như thế nào nó hoạt động. – tmpearce

Trả lời

0

trình duyệt không có hình ảnh sao chép sự kiện, vì vậy bạn cần phải mô phỏng nó bằng một số vào clipboard tricks.also không lưu hình ảnh trong it.Clipboard chỉ tiết kiệm văn bản trong itself.You cần để chuyển đổi hình ảnh thành chuỗi được mã hóa base64 rồi lưu nó vào khay nhớ tạm và dán vào ứng dụng của bạn. Nhưng có vấn đề với điều này là dữ liệu khay nhớ tạm, hình ảnh được sao chép hoặc có một số dữ liệu khác của một ứng dụng khác trong đó. điều này, bạn có thể thêm một chuỗi duy nhất vào chuỗi được mã hóa của bạn lúc đầu và hoặc ở cuối và kiểm tra nó bất cứ nơi nào bạn muốn dán nó. Để chuyển đổi hình ảnh thành chuỗi base64encode, bạn có thể sử dụng mã này:

function getImageData(img) { 
    var canvas = document.createElement("canvas"); 
    canvas.width = img.width; 
    canvas.height = img.height; 
    var ctx = canvas.getContext("2d"); 
    ctx.drawImage(img, 0, 0); 
    var imgd = canvas.toDataURL("image/png"); 
    return imgd; 
} 

Chuyển thẻ ‍‍‍‍ img vào chức năng này để nhận kết quả của bạn.

Các vấn đề liên quan