Offenlegung: Ich habe den Code geschrieben, den Trello verwendet; der nachfolgende Code ist der tatsächliche Quellcode, den Trello verwendet, um den Zwischenspeichertrick zu bewerkstelligen.
Wir haben eigentlich keinen "Zugriff auf die Zwischenablage des Benutzers", sondern wir helfen dem Benutzer ein wenig, indem wir etwas Nützliches auswählen, wenn sie Strg+C drücken.
Es klingt so, als ob du es herausgefunden hast; wir nutzen die Tatsache aus, dass du den Strg-Taste zuerst drücken musst, wenn du Strg+C drücken möchtest. Wenn die Strg-Taste gedrückt wird, fügen wir ein Textfeld ein, das den Text enthält, den wir auf der Zwischenablage haben möchten, und wählen den gesamten Text darin aus, damit die Auswahl bereit ist, wenn die C-Taste gedrückt wird. (Dann verstecken wir das Textfeld, wenn die Strg-Taste losgelassen wird.)
Genau genommen macht Trello dies:
TrelloClipboard = new class
constructor: ->
@value = ""
$(document).keydown (e) =>
# Dies nur machen, wenn etwas auf die Zwischenablage gelegt werden soll und es aussieht, als würden sie eine Kopier-Verknüpfung starten
if !@value || !(e.ctrlKey || e.metaKey)
return
if $(e.target).is("input:visible,textarea:visible")
return
# Abbrechen, wenn es so aussieht, als ob sie etwas Text ausgewählt haben (vielleicht versuchen sie, einen Teil der Beschreibung oder so zu kopieren)
if window.getSelection?()?.toString()
return
if document.selection?.createRange().text
return
_.defer =>
$clipboardContainer = $("#clipboard-container")
$clipboardContainer.empty().show()
$("")
.val(@value)
.appendTo($clipboardContainer)
.focus()
.select()
$(document).keyup (e) ->
if $(e.target).is("#clipboard")
$("#clipboard-container").empty().hide()
set: (@value) ->
Im DOM haben wir:
CSS für den Zwischenablage-Kram:
#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;
}
... und das CSS sorgt dafür, dass du das Textfeld tatsächlich nicht sehen kannst, wenn es auftaucht ... aber es ist "genug sichtbar", um daraus zu kopieren.
Wenn du über eine Karte schwebst, wird aufgerufen
TrelloClipboard.set(cardUrl)
... dann weiß der Zwischenablagenhelfer, was ausgewählt werden soll, wenn die Strg-Taste gedrückt wird.