JS - Есть ли способ отображения текста в буфере обмена? - PullRequest
0 голосов
/ 23 октября 2019

Я работаю над школьным заданием, где я пытаюсь увеличить видимость Ctrl + c и Ctrl + p. Сейчас моя цель - показать, какой текст был скопирован за секунду textarea. Код у меня «работает», но он не идеален.

Вот мой код (который я получил от здесь и здесь ):

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>Ctrl+c Ctrl+v allowed</h3>
<textarea></textarea>
<br>
<br>
<h3>Clipboard</h3>
<textarea id="clipBoard"></textarea>

<script>
    $(document).ready(function() {
        var ctrlDown = false,
            ctrlKey = 17,
            cmdKey = 91,
            vKey = 86,
            cKey = 67;

        $(document).keydown(function(e) {
            if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = true;
        }).keyup(function(e) {
            if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = false;
        });     

        // Document Ctrl + C/V 
        $(document).keydown(function(e) {

            var clip = document.getElementById("clipBoard");
            if (ctrlDown && (e.keyCode == cKey))
            {
                navigator.clipboard.readText()
                .then(text => {
                    clip.value = text;
                })
                .catch(err => {

                });
                console.log("Document catch Ctrl+C");

            }
            if (ctrlDown && (e.keyCode == vKey)) 
            {
                console.log("Document catch Ctrl+V");
            }
        });
    });
</script>

Есть 2 проблемы с этим решением.

Сначала веб-страница запрашивает разрешение на копирование. Я понимаю необходимость в этом, но есть ли способ обойти это?

Во-вторых, если пользователь говорит «нет», я не могу отобразить текст clipbaord, когда в буфере обмена есть что-то, что может просто испортитьзадание.

Есть ли способ обойти эти проблемы?

Спасибо!

1 Ответ

1 голос
/ 23 октября 2019

Нет. Вы можете использовать более старые технологии, такие как execCommand, чтобы вставить содержимое буфера обмена в выделенное текстовое поле, но это требует фактического вставки и является устаревшим. Современный Clipboard API требует разрешений пользователя для очень уважительной причины (представьте себе, если вы скопировали, скажем, порно URL или номер банковского счета, а также веб-сайт может получить эту информацию никто не знает) - пытается требования обходных разрешения для API, которыеТребовать это не хорошо. Если это для школьного задания, я не вижу причин, по которым ваш учитель или кто-либо, кто оценивает вас, не дал бы разрешение браузеру использовать API буфера обмена, когда они попросили вас получить содержимое буфера обмена.

...