Можно ли читать буфер обмена в Firefox, Safari и Chrome, используя Javascript? - PullRequest
31 голосов
/ 24 октября 2008

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

window.clipboardData.getData("Text")

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

Ответы [ 5 ]

16 голосов
/ 24 октября 2008

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) {
        // ...
    }
};
14 голосов
/ 03 ноября 2008

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

2 голосов
/ 24 октября 2008

NO. И если вы обнаружите взлом (например, старую версию flash), не зависите от него.

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

1 голос
/ 24 октября 2008

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

0 голосов
/ 26 января 2019

Используя предложение @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.log('pasted: ' + val);

        }, 50);

    });

});
...