Я хотел бы знать способ сделать мой script обнаружением содержимого буфера обмена и вставить его в текстовое поле при открытии страницы без ввода пользователем. Как это можно сделать?
Получить текущий буфер обмена?
Ответ 1
Вы не можете знать, что находится в буфере обмена пользователя, если вы не использовали какой-либо флеш-бэкэнд при копировании текста.
Обновление: Более правильный ответ здесь
Ответ 2
window.clipboardData.getData('Text')
будет работать в некоторых браузерах. Однако многие браузеры, где он работает, подскажут пользователю, хотите ли они, чтобы веб-страница имела доступ к буферу.
Ответ 3
В зависимости от того, когда вы читаете это, новый API буфера обмена может быть доступен через navigator.clipboard
. Это можно использовать так:
navigator.clipboard.readText()
.then(text => {
console.log('Pasted content: ', text);
})
.catch(err => {
console.error('Failed to read clipboard contents: ', err);
});
Или с асинхронным синтаксисом:
const text = await navigator.clipboard.readText();
Имейте в виду, что это предложит пользователю диалоговое окно с запросом разрешения, так что никакие смешные дела невозможны.
(ПРИМЕЧАНИЕ: это не будет работать, если вызывается из консоли, но потребует прямого действия пользователя, такого как нажатие кнопки, спасибо @Artur)
Ответ 4
Вы можете использовать
window.clipboardData.getData('Text')
чтобы получить содержимое пользовательского буфера обмена в IE. Однако в другом браузере вам может понадобиться использовать flash для получения контента, поскольку для доступа к буферу нет стандартного интерфейса. Возможно, вы можете попробовать этот плагин Zero Clipboard
Ответ 5
Далее вы получите выбранный контент, а также обновите буфер обмена.
Свяжите идентификатор элемента с событием копирования, а затем получите выделенный текст. Вы можете заменить или изменить текст. Получите буфер обмена и установите новый текст. Чтобы получить точное форматирование, вам нужно установить тип как "text/hmtl". Вы также можете привязать его к документу вместо элемента.
$(ElementId).bind('copy', function(event) {
var selectedText = window.getSelection().toString();
selectedText = selectedText.replace(/\u200B/g, "");
clipboardData = event.clipboardData || window.clipboardData || event.originalEvent.clipboardData;
clipboardData.setData('text/html', selectedText);
event.preventDefault();
});