Pengungkapan: Saya menulis kode yang digunakan Trello ; kode di bawah ini adalah kode sumber aktual yang digunakan Trello untuk menyelesaikan trik clipboard.
Kami sebenarnya tidak "mengakses clipboard pengguna", melainkan kami membantu pengguna keluar sedikit dengan memilih sesuatu yang bermanfaat ketika mereka menekan Ctrl+ C.
Kedengarannya seperti Anda sudah mengetahuinya; kami mengambil keuntungan dari kenyataan bahwa ketika Anda ingin menekan Ctrl+ C, Anda harus menekan Ctrltombol terlebih dahulu. Ketika Ctrltombol ditekan, kita memunculkan teks yang berisi teks yang ingin kita akhiri di clipboard, dan pilih semua teks di dalamnya, sehingga pemilihan semua diatur ketika tombol Cditekan. (Kemudian kita menyembunyikan textarea saat Ctrlkunci muncul)
Secara khusus, Trello melakukan ini:
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) ->
Di DOM kita punya
<div id="clipboard-container"><textarea id="clipboard"></textarea></div>
CSS untuk hal-hal 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;
}
... dan CSS membuatnya sehingga Anda tidak bisa benar-benar melihat textarea ketika muncul ... tapi itu "terlihat" cukup untuk menyalin.
Ketika Anda mengarahkan kursor ke atas kartu, kartu itu memanggil
TrelloClipboard.set(cardUrl)
... jadi penolong clipboard tahu apa yang harus dipilih ketika Ctrltombol ditekan.