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

StackOverflow https://stackoverflow.com/questions/233719

Вопрос

Я пытаюсь прочитать содержимое буфера обмена, используя 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 и 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);

    });

});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top