Можно ли читать буфер обмена в Firefox, Safari и Chrome с помощью Javascript?

Я пытаюсь прочитать содержимое буфера обмена с помощью Javascript. С помощью Internet Explorer можно использовать функцию

window.clipboardData.getData("Text")

Есть ли аналогичный способ чтения буфера обмена в Firefox, Safari и Chrome?

Ответ 1

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) {
        // ...
    }
};

Ответ 2

Онлайн-таблицы перехватывают события Ctrl + C, Ctrl + V и переносят фокус на скрытый элемент управления TextArea и либо устанавливают его содержимое в желаемое содержимое нового буфера обмена для копирования, либо читают его содержимое после завершения события для вставки.

Ответ 3

НЕТ. И если вы найдете взломать (например, старую версию flash), не зависеть от нее.

Могу ли я спросить, почему вы хотите читать из буфера обмена? Если пользователь хочет передать содержимое буфера обмена, все, что им нужно сделать, это вставить.

Ответ 4

Я считаю, что люди используют скрытый элемент Flash для чтения данных буфера обмена из указанных вами браузеров.

Ответ 5

Используя предложение @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);

    });

});