Я знаю, что этот вопрос был опубликован давно, но мне нужно было проверить, как это делает Google, так что, возможно, кто-то найдет это полезным.
На самом деле Google использует также системный буфер обмена, но это немного сложно.В случае, когда вы используете сочетание клавиш, вы можете перехватить событие копирования / вставки / вырезания, например, в окне:
window.addEventListener('copy', function (ev) {
console.log('copy event');
// you can set clipboard data here, e.g.
ev.clipboardData.setData('text/plain', 'some text pushed to clipboard');
// you need to prevent default behaviour here, otherwise browser will overwrite your content with currently selected
ev.preventDefault();
});
живой пример сочетания клавиш: http://jsfiddle.net/tyk9U/
К сожалению, это единственное решение дляСочетание клавиш и проблема с контекстным меню, потому что вы не можете получить доступ к данным буфера обмена без собственного (доверенного) события копирования / вырезания / вставки.Но Google делает интересный трюк.Существует API document.execCommand()
, который позволяет вам запускать команды для contenteditable элемента, и есть команда 'copy', которую вы можете вызвать с помощью document.execCommand('copy')
.Но когда вы попробуете это в консоли в Chrome, он вернет false
.Я потратил немного времени на изучение этого, и оказалось, что у них установлено расширение Chrome, которое называется «Диск Google» (перейдите к chrome: // apps /, и вы можете увидеть его там), которое обеспечивает доступ к буферу обмена для доменов drive.google.com и docs.google.com.Откройте какой-нибудь документ или электронную таблицу и введите в консоли document.execCommand('copy')
- он вернет true
.При удалении расширения вы не сможете использовать операции с буфером обмена из контекстного меню.
Вы можете создать такое приложение для себя с очень простым файлом манифеста (подробности здесь https://developer.chrome.com/apps/first_app):
{
"manifest_version": 2,
"name": "App name",
"description": "App description",
"version": "1.0",
"app": {
"urls": [
"http://your.app.url.here/"
],
"launch": {
"web_url": "http://your.app.url.here/"
}
},
"icons": {
"128": "x-128.png"
},
"permissions": [
"clipboardRead",
"clipboardWrite"
]
}
Поле «Полномочия» здесь разрешает операции с буфером обмена.
Теперь, когда вы включили эту функцию, вы можете сделать document.execCommand('copy')
, и она будет работать (вернет true
). Но это еще не все - document.execCommand('copy')
в chrome запускает событие копирования, и вы можете поймать его с тем же кодом, который используется для перехвата ярлыков буфера обмена клавиатуры. Теперь это делает Google.
Конечно, это описание действительно только для Chrome.