Я пытаюсь прочитать содержимое буфера обмена с помощью Javascript. С помощью Internet Explorer можно использовать функцию
window.clipboardData.getData("Text")
Есть ли аналогичный способ чтения буфера обмена в Firefox, Safari и Chrome?
Я пытаюсь прочитать содержимое буфера обмена с помощью Javascript. С помощью Internet Explorer можно использовать функцию
window.clipboardData.getData("Text")
Есть ли аналогичный способ чтения буфера обмена в Firefox, Safari и Chrome?
Safari поддерживает чтение буфера обмена во время событий onpaste
:
Вы хотите сделать что-то вроде:
someDomNode.onpaste = function(e) {
var paste = e.clipboardData && e.clipboardData.getData ?
e.clipboardData.getData('text/plain') : // Standard
window.clipboardData && window.clipboardData.getData ?
window.clipboardData.getData('Text') : // MS
false;
if(paste) {
// ...
}
};
Онлайн-таблицы перехватывают события Ctrl + C, Ctrl + V и переносят фокус на скрытый элемент управления TextArea и либо устанавливают его содержимое в желаемое содержимое нового буфера обмена для копирования, либо читают его содержимое после завершения события для вставки.
НЕТ. И если вы найдете взломать (например, старую версию flash), не зависеть от нее.
Могу ли я спросить, почему вы хотите читать из буфера обмена? Если пользователь хочет передать содержимое буфера обмена, все, что им нужно сделать, это вставить.
Я считаю, что люди используют скрытый элемент Flash для чтения данных буфера обмена из указанных вами браузеров.
Используя предложение @agsamek, я создал небольшой тестовый фрагмент и заставил его работать. В моем случае мне нужно подождать после новой загрузки страницы для вставленного ввода, поэтому я сосредотачиваюсь на текстовой области вне поля зрения и читаю текст оттуда.
Вы можете расширить это, чтобы прослушать определенные клавиши (вставить комбинацию), а затем сосредоточиться на скрытом поле. Определенно, предстоит проделать еще больше работы, так как я думаю, что вам нужно переориентироваться, а не на последний выделенный элемент и вставить туда содержимое.
Для моего варианта использования этого было достаточно, чтобы он работал в Chrome. Предложения приветствуются.
https://jsfiddle.net/wuestkamp/91dxjv7s/11/
$(function () {
$('body').prepend('<input type="text" id="hidden_textbox" style="position: absolute; width:0px; height: 0px; top: -100px; left: -100px">');
var $hiddenTextbox = $('#hidden_textbox');
$hiddenTextbox.focus();
$(document).on('paste', function () {
setTimeout(function () {
var val = $hiddenTextbox.val();
console.log('pasted: ' + val);
}, 50);
});
});