writeText()
writeText() — это метод объекта Clipboard, предназначенный для копирования текстовых данных в буфер обмена. Метод возвращает Promise, который завершается успешно в случае, если текст скопирован, и выдаёт ошибку, если операция не удалась.
Синтаксис
navigator.clipboard.writeText('text')
navigator в данном случае - это глобальный объект, предоставляющий информацию о браузере пользователя и его операционной системе.
clipboard — это свойство объекта navigator, которое предоставляет доступ к Clipboard API. Этот API, в свою очередь, позволяет взаимодействовать с буфером обмена операционной системы, выполняя операции вырезания, копирования и вставки.
Так как writeText() возвращает Promise, результат работы метода обрабатывают с помощью then() при успешном выполнении, и catch(), для обработки ошибок.
navigator.clipboard.writeText('text')
.then(() => {
console.log('Скопировано')
})
.catch(error => {
console.error(`Текст не скопирован ${error}`)
})
Копируем текст из input по клику на кнопку
<input type="text" id="copy-text" />
<button id="copy-btn">Скопировать</button>
<script>{"let copyText = document.querySelector('#copy-text')\n document.querySelector('#copy-btn').addEventListener('click', () => {\n navigator.clipboard.writeText(copyText.value)\n .then(() => {\n console.log('Скопировано')\n })\n .catch(error => {\n console.error(`Текст не скопирован ${error}`)\n })\n })"}</script>
В результате получим текст из input в буфер обмена и сообщение Скопировано в console.
Попробуем скопировать текст из input при загрузке страницы.
document.addEventListener("DOMContentLoaded", function() {
let copyText = document.querySelector('#copy-text')
navigator.clipboard.writeText(copyText.value)
.then(() => {
console.log('Скопировано')
})
.catch(error => {
console.error(`Текст не скопирован ${error}`)
})
});
Результатом будет следующий текст в console: Текст не скопирован. NotAllowedError: Document is not focused. Это произошло потому, что был вызван catch(), который сообщил нам о неудаче. Дело в том, что writeText() позволит скопировать текст в буфер обмена только в том случае, если данное действие инициирует сам пользователь, например, через клик мыши или нажатие клавиши, в противном случае выполнение метода завершится неудачей из-за ограничений безопасности браузера.