Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > insert from clipboard


Автор: YahоО 14.2.2021, 15:11
Как в javascript получить в переменную то, что есть в буфере обмена?
Например, скопировали в Clipboard:  document.execCommand('copy'), и что дальше, 
ведь это пол-дела, вторая половина это надо что то сделать с тем что скопировано, но как к нему добраться?

Автор: ksnk 14.2.2021, 19:03
Вопрос очень сложный. Иногда - можно
Код

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <input type="text" class="to-copy" placeholder="Type something..." aria-label="Type something">
    <button class="write-btn">Copy to clipboard</button>
</div>

<div>
    <h3 class="clipboard-results"></h3>
    <button class="read-btn">Paste from clipboard</button>
</div>
<script>
    const readBtn = document.querySelector('.read-btn');
    const writeBtn = document.querySelector('.write-btn');

    const resultsEl = document.querySelector('.clipboard-results');
    const inputEl = document.querySelector('.to-copy');

    readBtn.addEventListener('click', () => {
        navigator.clipboard.readText()
            .then(text => {
                resultsEl.innerText = text;
            })
            .catch(err => {
                console.log('Something went wrong', err);
            })
    });

    writeBtn.addEventListener('click', () => {
        const inputValue = inputEl.value.trim();
        if (inputValue) {
            navigator.clipboard.writeText(inputValue)
                .then(() => {
                    inputEl.value = '';
                    if (writeBtn.innerText !== 'Copied!') {
                        const originalText = writeBtn.innerText;
                        writeBtn.innerText = 'Copied!';
                        setTimeout(() => {
                            writeBtn.innerText = originalText;
                        }, 1500);
                    }
                })
                .catch(err => {
                    console.log('Something went wrong', err);
                })
        }
    });
</script>
</body>
</html>

Цитата

Надо отметить, что сейчас новое API доступно только в Chrome 66+ и поддерживает лишь копирование и вставку обычного текста. Кроме того, работает оно только тогда, когда страница загружена по HTTPS или с localhost, и только в тех случаях, когда страница открыта в текущей активной вкладке браузера.

https://habr.com/ru/company/ruvds/blog/358494/

Автор: YahоО 14.2.2021, 22:59
ksnk, благодарю Вас, 
но этот код сегодня тоже рассматривал, и он требует какие то дополнительные действия (запрашивает разрешение на просмотр текста),
и кроме того возможна еще и блокировка. Все это не только не способствует продвижению "такого" кода в массы, 
но даже вполне адекватного любого посетителя сайта вовсе отпугнет чем то непонятно-страшшШшным. 
Будучи посетителем сайта с таким предупреждением я бы точно прекратил общаться с таким сайтом.




Автор: ksnk 15.2.2021, 10:39
Вообще-то IE уже давно реализовал Copy-Paste в своем браузере, и после чего сразу все начали волоса во всех местах рвать и лавочку моментально прикрыли. 

По сути - непосредственный доступ к клипборду не так чтобы и нужен в реальной жизни, ну разве что действительно для кражи паролей. Скопировать неведомую текстовую хрень в клипборд пользователя можно без разрешения. Дальше - достаточно самого пользователя уговорить вставить скопированный им самим текст в специальное место. Потом по onchange забрать и делать с ним что надо. 

Автор: YahоО 15.2.2021, 11:31
Таки да, единственное это уговорить посетителя, потому как уговорить браузер выполнить клик keyCode:86,ctrlKey:true бесполезно.
Ну и ладно, без копипаста тоже можно жить ))

Автор: _zorn_ 2.4.2021, 20:25
...

Добавлено @ 20:29
Цитата(YahоО @  15.2.2021,  18:31 Найти цитируемый пост)
Таки да, единственное это уговорить посетителя

И это правильно. Я бы не хотел чтобы каждый сайт читал (и отсылал в неведомые дали) мой клипборд без разрешения например по интервалу (а там пароли например частенько).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)