Розкриття інформації: я написав код, який використовує Trello ; наведений нижче код - це фактичний вихідний код, який Trello використовує для досягнення фокусу в буфері обміну.
Ми фактично не «отримуємо доступ до буфера обміну користувачами», натомість допомагаємо користувачеві трохи вибирати щось корисне, коли він натискає Ctrl+ C.
Здається, ви це зрозуміли; ми скористаємося тим, що коли ви хочете натиснути Ctrl+ C, ви повинні натиснути Ctrlклавішу спочатку. Коли Ctrlнатискається клавіша, ми вписуємо текстову область, яка містить текст, який ми хочемо в кінцевому підсумку, у буфер обміну, і вибираємо весь текст у ній, тому вибір встановлюється під час Cнатискання клавіші. (Потім ми ховаємо текстову область, коли з'являється Ctrlключ)
Конкретно, Trello робить це:
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) ->
У DOM у нас є
<div id="clipboard-container"><textarea id="clipboard"></textarea></div>
CSS для буфера обміну:
#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;
}
... і CSS робить це таким чином, що ви фактично не можете бачити textarea, коли він з'являється ..., але це достатньо "видимо" для копіювання.
Коли ви наведіть курсор на карту, вона дзвонить
TrelloClipboard.set(cardUrl)
... тож помічник буфера обміну знає, що вибрати при Ctrlнатисканні клавіші.