2009-07-17 42 views
7

Tôi đang cố viết hàm Javascript để chỉnh sửa nội dung từ clipboard trước khi dán. Ngay bây giờ tôi đã bị ràng buộc sự kiện 'dán' để hoạt động thông qua JQuery.Nhận dữ liệu clipboard

$(this.elementDoc).bind('paste', function(event){ 
    self.OnPaste(event); 
}); 

Nhưng điều đó không quan trọng. Bây giờ tôi muốn lấy dữ liệu từ clipboard, nhưng tôi không thể tìm ra cách. Tôi sẽ rất vui vì mọi gợi ý.

Trả lời

4

Đây là một khó khăn. Nếu tôi nhớ chính xác, IE cho phép truy cập vào clipboard, nhưng theo mặc định Firefox không phải do vấn đề bảo mật. Tôi đã phải làm điều này cho một dự án tôi đã làm việc trên, và đã buộc phải sử dụng một tập tin SWF nhỏ mà đã sao chép.

http://www.jeffothy.com/weblog/clipboard-copy/

+0

Theo như tôi có thể biết, giải pháp này cho phép sao chép vào khay nhớ tạm, nhưng không nhận được TỪ khay nhớ tạm. Do đó, đây không phải là giải pháp cho câu hỏi được đề xuất - tôi không biết tại sao nó được đánh dấu như vậy (trừ khi OP bị nhầm lẫn). Nếu tôi sai, xin hãy giải thích! – bgmCoder

1

Đây là cách lấy từ IE hoặc từ Chrome. Đầu tiên nó ngăn cản việc dán thực tế xảy ra, sau đó nó kiểm tra tính năng và sau đó đặt văn bản biến thành văn bản clipboard. Với điều đó, bạn có thể thao tác văn bản, và sau đó đặt nó làm giá trị cho phần tử/phần tử mà bạn dán vào hoặc bất kỳ thứ gì bạn muốn làm với nó.

//get clipboard text 
event.preventDefault(); 
var text = null; 
if (window.clipboardData) 
    text = window.clipboardData.getData("Text"); 
else if (event.originalEvent && event.originalEvent.clipboardData) 
    text = event.originalEvent.clipboardData.getData("Text"); 

//manipulate the text 
text = '..do stuff with it..'; 
//set the text 
$(this).val(text); 
2

clipboardData có thể chứa dữ liệu ở nhiều định dạng tiềm năng khác nhau. Có thể một chương trình của nó sẽ thêm dữ liệu clipboard vào nhiều định dạng. Để xem qua các định dạng, hãy xem qua clipboardData.types.

Thường thì dữ liệu khay nhớ tạm chứa văn bản thuần túy và loại đầu tiên được liệt kê trong types sẽ là loại "văn bản/đồng bằng" MIME. Nếu bạn sao chép văn bản từ một trình duyệt tho, bạn sẽ thấy hai loại trong danh sách: "text/plain" và "text/html". Tùy thuộc vào chuỗi bạn chuyển vào getData, bạn có thể lấy văn bản thuần hoặc html. Có vẻ như "văn bản" là viết tắt của "văn bản/đồng bằng" và "url" là viết tắt của "text/uri-list".

element.addEventListener('paste', function(event) { 
    var cb = event.clipboardData 
    if(cb.types.indexOf("text/html") != -1) {  // contains html 
    var pastedContent = cb.getData("text/html") 
    } else if(cb.types.indexOf("text/html") != -1) { // contains text 
    var pastedContent = cb.getData("text/html") 
    } else { 
    var pastedContent = cb.getData(cb.types[0]) // get whatever it has 
    } 

    // do something with pastedContent 
}) 

Để biết thêm thông tin về cách sử dụng clipboardData.getData, hãy xem the ugly spec.

+0

Bạn có thể giải thích lý do tại sao điều này có hiệu quả không? –

+0

Đã thêm một loạt giải thích –

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