Divulgazione: ho scritto il codice utilizzato da Trello ; il codice seguente è il codice sorgente effettivo che Trello usa per realizzare il trucco degli appunti.
In realtà non "accediamo agli appunti dell'utente", ma aiutiamo l'utente un po 'selezionando qualcosa di utile quando premono Ctrl+ C.
Sembra che tu l'abbia capito; sfruttiamo il fatto che quando vuoi premere Ctrl+ C, devi Ctrlprima premere il tasto. Quando Ctrlsi preme il tasto, pop-up in un'area di testo che contiene il testo che vogliamo finire negli Appunti e selezioniamo tutto il testo al suo interno, quindi la selezione viene impostata quando si Cpreme il tasto. (Quindi nascondiamo l'area di testo quando Ctrlviene visualizzata la chiave)
In particolare, Trello fa questo:
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) ->
Nel DOM abbiamo
<div id="clipboard-container"><textarea id="clipboard"></textarea></div>
CSS per gli appunti:
#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;
}
... e il CSS lo rende in modo che tu non riesca effettivamente a vedere l'area di testo quando appare ... ma è "visibile" abbastanza da cui copiare.
Quando passi con il mouse su una carta, questa chiama
TrelloClipboard.set(cardUrl)
... quindi l'helper degli appunti sa cosa selezionare quando Ctrlviene premuto il tasto.