Я пытаюсь прочитать содержимое буфера обмена с помощью Javascript. В Internet Explorer можно использовать функцию
window.clipboardData.getData("Text")
Есть ли аналогичный способ чтения буфера обмена в Firefox, Safari и Chrome?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я считаю, что люди используют скрытый элемент Flash для чтения данных буфера обмена из упомянутых вами браузеров.
Это определенно неверно, если когда-либо было. Flash 9+ может только написать в буфер обмена, но не читать из него.
Разъяснение к моему предыдущему комментарию: Flash 10+ может читать из буфера обмена, но только во время инициированного пользователем события paste (НЕТ после щелчка пользователя, в отличие от копирования).
НЕТ. И если вы найдете хак (например, старую версию flash), не зависите от этого.
Могу я спросить, почему вы хотите читать из буфера обмена? Если пользователь хочет передать содержимое буфера обмена, все, что ему нужно сделать, это вставить.
Я читаю буфер обмена в событии onpaste (в IE), чтобы отфильтровать недопустимые символы (например, чтобы удалить пробелы из целочисленного значения).
использовать onchange в поле, в которое они вставляются?
Это пост 7 лет назад. Я просто хочу передать всем, кто придет позже, информацию о том, что Демо Midas @ Mozilla покажет вам, как читать буфер обмена: www-archive.mozilla.org/editor/midasdemo NO FLASH. Попробовал с помощью строки из Википедии - результаты были потрясающими.
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) {
// ...
}
};
Если бы только firefox поддерживал это! Это безопасно и позволяет получить доступ к буферу обмена.
в Chrome нет элемента clipboardData
Я беру его обратно - я использовал привязку событий JQuery, поэтому мне пришлось использовать e.originalEvent.clipboardData
Могу ли я использовать этот класс буфера обмена для передачи данных из приложения winform в браузер
Электронные таблицы перехватывают события Ctrl + C, Ctrl + V и переносят фокус на скрытый элемент управления TextArea и либо устанавливают его содержимое на желаемое новое содержимое буфера обмена для копирования, либо читают его содержимое после завершения события для вставки.
Как вы проверяете «после того, как мероприятие закончилось для вставки»?
Не знаю. Но поскольку весь метод в любом случае не является произведением искусства, я бы поспал 1 секунду;)
Мы только что добавили (благодаря приведенному выше комментарию за вдохновение) что-то подобное в CodeMirror (marijn.haverbeke.nl/codemirror). Он прослушивает onbeforepaste, создает текстовое поле, фокусирует его, засыпает 10 миллисекунд, захватывает контент, удаляет текстовое поле, возвращает фокус там, где он был раньше, и имеет свой грязный путь с вставленным текстом. Надежно работает только на IE. Реагируя на нажатия ctrl-V (и command-V), вы также можете заставить его работать в FF и, возможно, в некоторых других браузерах.
@Marijn: Я использовал тот же подход для редактора, над которым я работаю, и трюк со скрытым текстовым полем отлично работает во всех основных браузерах для клавиатурных вставок. К сожалению, IE запускает onbeforepaste, как только вы открываете контекстное меню: удалось ли вам с этим справиться?
Это объясняет, как копировать из буфера обмена?
Используя предложение @agsamek, я создал небольшой тестовый фрагмент и заставил его работать. В моем случае мне нужно подождать после загрузки новой страницы для вставленного ввода, поэтому я сосредотачиваюсь на текстовом поле вне поля зрения и читаю текст оттуда.
Вы можете расширить это, чтобы прослушивать определенные клавиши (комбинацию вставки), а затем сосредоточиться на скрытом поле. Определенно, нужно сделать больше работы, так как я думаю, вам нужно перефокусировать затем на последний сфокусированный элемент и вставить туда контент.
Для моего случая использования этого было достаточно, чтобы он работал в последних версиях Chrome и Firefox. Предложения приветствуются.
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.info('pasted: ' + val);
}, 50);
});
});
Иногда. Это зависит от настройки параметра безопасности «Разрешить программный доступ к буферу обмена». В IE7 по умолчанию для безопасности «Средний-высокий» он настроен на запрос, прежде чем разрешить доступ.