Nhận nội dung clipboard hiện tại? [đóng cửa]


107

Tôi muốn biết một cách để làm cho tập lệnh của tôi phát hiện nội dung của khay nhớ tạm và dán nó vào trường văn bản khi trang được mở mà không có đầu vào từ người dùng. Nó được hoàn thiện bằng cách nào?


Bạn không thể thực sự biết những gì có trong khay nhớ tạm của người dùng trừ khi bạn sử dụng một số loại phụ trợ flash khi họ sao chép văn bản. ------- Cập nhật: Một hơn đúng câu trả lời ở đây
Naftali aka Neal



Câu trả lời:


73

window.clipboardData.getData('Text')sẽ hoạt động trong một số trình duyệt. Tuy nhiên, nhiều trình duyệt nơi nó hoạt động sẽ nhắc người dùng về việc họ có muốn trang web có quyền truy cập vào khay nhớ tạm hay không.


17
Điều này sẽ hoạt động trong bất kỳ trình duyệt nào khác ngoài Internet Explorer?
Anderson Green

6
Chắc là không. Xem câu hỏi này: stackoverflow.com/questions/400212/…
Dave

7
Bạn có thể kiểm tra khả năng tương thích tại đây caniuse.com/#search=clipboardData
Sergey Novikov

1
Một giải pháp tốt hơn là lấy đối tượng nút, nhưng không lấy đối tượng cửa sổ. Xem ở đây
rplaurindo

Tôi lo lắng về Keepass và bảo mật của nó. Ứng dụng cho phép tôi sao chép mật khẩu của mình vào khay nhớ tạm.
René Winkler

69

Sử dụng API khay nhớ tạm mới , thông qua navigator.clipboard. Nó có thể được sử dụng như thế này:

navigator.clipboard.readText()
  .then(text => {
    console.log('Pasted content: ', text);
  })
  .catch(err => {
    console.error('Failed to read clipboard contents: ', err);
  });

Hoặc với cú pháp async:

const text = await navigator.clipboard.readText();

Hãy nhớ rằng điều này sẽ nhắc người dùng với một hộp thoại yêu cầu quyền, vì vậy bạn không thể làm gì được.

Đoạn mã trên sẽ không hoạt động nếu được gọi từ bảng điều khiển. Nó chỉ hoạt động khi bạn chạy mã trong một tab đang hoạt động. Để chạy mã từ bảng điều khiển của bạn, bạn có thể đặt thời gian chờ và nhấp vào cửa sổ trang web một cách nhanh chóng:

setTimeout(async () => {
  const text = await navigator.clipboard.readText();
  console.log(text);
}, 2000);

Đọc thêm về API và cách sử dụng trong tài liệu dành cho nhà phát triển của Google .

Spec


18
Lưu ý rằng nó luôn dẫn đến lỗi khi được gọi từ bảng điều khiển. Nhưng nó không làm việc trên một hành động người dùng trực tiếp, giống như khi bạn nhấn một nút trên trang.
Klesun

điều này dường như chỉ trả về văn bản thuần túy ... ngay cả khi văn bản có định dạng nằm trên khay nhớ tạm. làm thế nào tôi có thể nhận được điều đó? \
Michael

@ Michael, hỗ trợ cho hình ảnh và những người khác chỉ được thêm vào trong phiên bản Chrome mới nhất (76)
iuliu.net

Bạn có thể kiểm tra trong bảng điều khiển bằng cách gói vào một setTimeout, sau đó nhấp lại vào trang.
edb Bentley

18

Bạn có thể dùng

window.clipboardData.getData('Text')

để lấy nội dung của khay nhớ tạm của người dùng trong IE. Tuy nhiên, trong trình duyệt khác, bạn có thể cần sử dụng flash để lấy nội dung, vì không có giao diện chuẩn để truy cập vào khay nhớ tạm. Có thể bạn có thể thử plugin Zero Clipboard này


1
liên kết được tốt (một lần nữa) ngày làm việc
stephanos

5
ZeroClipboard chỉ cho phép bạn sao chép vào khay nhớ tạm, không đọc từ nó.
DSimon

4

Sau đây sẽ cung cấp cho bạn nội dung đã chọn cũng như cập nhật clipboard.

Ràng buộc id phần tử với sự kiện sao chép và sau đó lấy văn bản đã chọn. Bạn có thể thay thế hoặc sửa đổi văn bản. Lấy khay nhớ tạm và đặt văn bản mới. Để có được định dạng chính xác, bạn cần đặt loại là "text / hmtl". Bạn cũng có thể liên kết nó với tài liệu thay vì phần tử.

document.querySelector('element').bind('copy', function(event) {
  var selectedText = window.getSelection().toString(); 
  selectedText = selectedText.replace(/\u200B/g, "");

  clipboardData = event.clipboardData || window.clipboardData || event.originalEvent.clipboardData;
  clipboardData.setData('text/html', selectedText);

  event.preventDefault();
});

21
Chào mừng đến với trang web này! Tôi rất vui vì bạn đang đóng góp bằng cách trả lời một câu hỏi. Nhưng xin lưu ý rằng câu trả lời của bạn không thực sự trả lời câu hỏi của OP. Câu hỏi là lấy nội dung từ khay nhớ tạm và dán nó vào đâu đó khi mở một trang. Ngoài ra, vì câu hỏi không có thẻ jquery , các câu trả lời bằng jQuery nên chứa một lưu ý rằng một thư viện (jQuery) được sử dụng.
KarelG
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.