Divulgation: j'ai écrit le code qui utilise Trello; le code ci-dessous est le code source Trello utilise pour accomplir le presse-papiers truc.
Nous ne sommes pas réellement "l'accès de l'utilisateur presse-papiers", au lieu de nous aider à l'utilisateur un peu en sélectionnant quelque chose d'utile quand ils appuyez sur Ctrl+C.
Sonne comme vous avez pensé à elle; nous profitons du fait que, si vous voulez frapper Ctrl+C, vous devez frapper la touche Ctrl touche en premier. Lorsque la touche Ctrl est enfoncée, nous pop dans un textarea qui contient le texte que nous voulons pour finir sur le presse-papiers, et de sélectionner tout le texte, de sorte que la sélection est tous ensemble lors de la C touche. (Puis nous cacher le textarea quand le Ctrl clé vient)
Plus précisément, Trello fait ceci:
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) ->
Dans les DOM, nous avons
<div id="clipboard-container"><textarea id="clipboard"></textarea></div>
CSS pour le presse-papiers trucs:
#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;
}
... et le CSS qu'il fait en sorte que vous ne pouvez pas voir le textarea quand il saute ... mais il est "visible" assez pour copier à partir de.
Lorsque vous passez la souris sur une carte, il appelle
TrelloClipboard.set(cardUrl)
... alors le presse-papiers helper sait que choisir lorsque la touche Ctrl est enfoncée.