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

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

window.clipboardData.getData("Text")

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

Иногда. Это зависит от настройки параметра безопасности «Разрешить программный доступ к буферу обмена». В IE7 по умолчанию для безопасности «Средний-высокий» он настроен на запрос, прежде чем разрешить доступ.

bobince 24.10.2008 18:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
34
1
44 207
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

Это определенно неверно, если когда-либо было. Flash 9+ может только написать в буфер обмена, но не читать из него.

James M. Greene 17.01.2013 20:47

Разъяснение к моему предыдущему комментарию: Flash 10+ может читать из буфера обмена, но только во время инициированного пользователем события paste (НЕТ после щелчка пользователя, в отличие от копирования).

James M. Greene 10.09.2013 07:19

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

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

Я читаю буфер обмена в событии onpaste (в IE), чтобы отфильтровать недопустимые символы (например, чтобы удалить пробелы из целочисленного значения).

Gil Faria 24.10.2008 19:01

использовать onchange в поле, в которое они вставляются?

nickf 10.11.2008 17:19

Это пост 7 лет назад. Я просто хочу передать всем, кто придет позже, информацию о том, что Демо Midas @ Mozilla покажет вам, как читать буфер обмена: www-archive.mozilla.org/editor/midasdemo NO FLASH. Попробовал с помощью строки из Википедии - результаты были потрясающими.

syntaxerror 13.01.2016 02:33
Ответ принят как подходящий

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 поддерживал это! Это безопасно и позволяет получить доступ к буферу обмена.

Nico Burns 24.07.2010 07:26

в Chrome нет элемента clipboardData

Muxa 14.12.2010 04:50

Я беру его обратно - я использовал привязку событий JQuery, поэтому мне пришлось использовать e.originalEvent.clipboardData

Muxa 14.12.2010 04:53

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

user1421044 04.01.2014 14:37

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

Как вы проверяете «после того, как мероприятие закончилось для вставки»?

schwerwolf 31.01.2009 00:30

Не знаю. Но поскольку весь метод в любом случае не является произведением искусства, я бы поспал 1 секунду;)

agsamek 23.02.2009 18:42

Мы только что добавили (благодаря приведенному выше комментарию за вдохновение) что-то подобное в CodeMirror (marijn.haverbeke.nl/codemirror). Он прослушивает onbeforepaste, создает текстовое поле, фокусирует его, засыпает 10 миллисекунд, захватывает контент, удаляет текстовое поле, возвращает фокус там, где он был раньше, и имеет свой грязный путь с вставленным текстом. Надежно работает только на IE. Реагируя на нажатия ctrl-V (и command-V), вы также можете заставить его работать в FF и, возможно, в некоторых других браузерах.

Marijn 20.08.2009 17:22

@Marijn: Я использовал тот же подход для редактора, над которым я работаю, и трюк со скрытым текстовым полем отлично работает во всех основных браузерах для клавиатурных вставок. К сожалению, IE запускает onbeforepaste, как только вы открываете контекстное меню: удалось ли вам с этим справиться?

Tim Down 16.02.2010 12:22

Это объясняет, как копировать из буфера обмена?

Lee Goddard 12.03.2018 23:04

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

    });

});

Другие вопросы по теме