Tiết lộ: Tôi đã viết mã mà Trello sử dụng ; mã dưới đây là mã nguồn thực tế mà Trello sử dụng để thực hiện thủ thuật clipboard.
Chúng tôi thực sự không "truy cập vào bảng tạm của người dùng", thay vào đó chúng tôi giúp người dùng thoát ra một chút bằng cách chọn thứ gì đó hữu ích khi họ nhấn Ctrl+ C.
Âm thanh như bạn đã tìm ra nó; chúng tôi tận dụng thực tế là khi bạn muốn nhấn Ctrl+ C, bạn phải nhấn Ctrlphím trước. Khi Ctrlnhấn phím, chúng tôi bật trong một vùng văn bản có chứa văn bản mà chúng tôi muốn kết thúc trên bảng tạm và chọn tất cả văn bản trong đó, vì vậy tất cả các lựa chọn được đặt khi Cnhấn phím. (Sau đó, chúng tôi ẩn textarea khi Ctrlkhóa xuất hiện)
Cụ thể, Trello thực hiện điều này:
TrelloClipboard = new class
constructor: ->
@value = ""
$(document).keydown (e) =>
# Only do this if there's something to be put on the clipboard, and it
# looks like they're starting a copy shortcut
if !@value || !(e.ctrlKey || e.metaKey)
return
if $(e.target).is("input:visible,textarea:visible")
return
# Abort if it looks like they've selected some text (maybe they're trying
# to copy out a bit of the description or something)
if window.getSelection?()?.toString()
return
if document.selection?.createRange().text
return
_.defer =>
$clipboardContainer = $("#clipboard-container")
$clipboardContainer.empty().show()
$("<textarea id='clipboard'></textarea>")
.val(@value)
.appendTo($clipboardContainer)
.focus()
.select()
$(document).keyup (e) ->
if $(e.target).is("#clipboard")
$("#clipboard-container").empty().hide()
set: (@value) ->
Trong DOM chúng tôi đã có
<div id="clipboard-container"><textarea id="clipboard"></textarea></div>
CSS cho nội dung clipboard:
#clipboard-container {
position: fixed;
left: 0px;
top: 0px;
width: 0px;
height: 0px;
z-index: 100;
display: none;
opacity: 0;
}
#clipboard {
width: 1px;
height: 1px;
padding: 0px;
}
... và CSS làm cho nó để bạn thực sự không thể nhìn thấy vùng văn bản khi nó xuất hiện ... nhưng nó "hiển thị" đủ để sao chép từ đó.
Khi bạn di chuột qua thẻ, nó gọi
TrelloClipboard.set(cardUrl)
... Vì vậy, sau đó trình trợ giúp clipboard biết những gì cần chọn khi Ctrlnhấn phím.