Раскрытие: я написал код, который использует 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 делает это таким образом, что вы не можете видеть текстовую область, когда она появляется ... но она достаточно "видима" для копирования.
Когда вы наводите курсор на карту, она вызывает
TrelloClipboard.set(cardUrl)
... так что помощник буфера обмена знает, что выбрать при Ctrlнажатии клавиши.