Offenlegung: Ich habe den Code geschrieben, den Trello verwendet . Der folgende Code ist der tatsächliche Quellcode, den Trello verwendet, um den Trick in der Zwischenablage auszuführen.
Wir "greifen nicht auf die Zwischenablage des Benutzers zu", sondern helfen dem Benutzer ein wenig, indem wir etwas Nützliches auswählen, wenn er Ctrl+ drückt C.
Klingt so, als hätten Sie es herausgefunden. Wir nutzen die Tatsache, dass Sie, wenn Sie Ctrl+ drücken möchten, zuerst Cdie CtrlTaste drücken müssen. Wenn die CtrlTaste gedrückt wird, wird ein Textbereich eingeblendet, der den Text enthält, der in der Zwischenablage angezeigt werden soll, und der gesamte darin enthaltene Text ausgewählt, sodass die Auswahl beim Drücken der CTaste festgelegt wird. (Dann verstecken wir den Textbereich, wenn der CtrlSchlüssel kommt)
Insbesondere tut Trello dies:
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) ->
Im DOM haben wir
<div id="clipboard-container"><textarea id="clipboard"></textarea></div>
CSS für die Zwischenablage:
#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 macht es so, dass Sie den Textbereich nicht sehen können, wenn er eingeblendet wird ... aber er ist "sichtbar" genug, um ihn zu kopieren.
Wenn Sie mit der Maus über eine Karte fahren, wird diese aufgerufen
TrelloClipboard.set(cardUrl)
... damit der Zwischenablage-Helfer weiß, was er auswählen soll, wenn die CtrlTaste gedrückt wird.