Как скопировать текстовое содержимое в теле в буфер обмена - PullRequest
0 голосов
/ 27 ноября 2018

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

  • выделение текстовых узлов и затем команда document.execCommand("copy")
  • выделение текстовых узлов и затем использование диспетчера клавиатуры:

    $("body").contents().filter(function(){return this.nodeType === 3;}).select();
    document.body.dispatchEvent(new KeyboardEvent("keyup", {bubbles: true, cancelable: false, key: "C", char: "C", ctrlKey: true}));
    

Никаких ошибок не появляется.Я прочитал в документации Chromium, что команда копирования отключена из соображений безопасности.Есть идеи как обойти это?

1 Ответ

0 голосов
/ 27 ноября 2018

Копирование в буфер обмена будет работать только при реальном взаимодействии с пользователем.Без истинного взаимодействия с пользователем это обычно терпит неудачу.Я считаю, что это для мер безопасности.Так что подключите его к событию клика.Тогда я также предлагаю вам использовать библиотеку типа clipboard.js , которая решает проблемы с различными браузерами и позволяет помещать HTML-разновидности и текстовые копии.

Если вы используете буфер обмена.js вы можете использовать такой код:

plaintext = "boo";
htmltext = "<strong>boo</strong>";
document.getElementById("copybutton").addEventListener('click', function() {
    clipboard.copy({ 
            'text/plain': plaintext,
            'text/html': htmltext
          }).then(
            function(){
                swal({
                    title: "Successfully copied",
                    text: "The thing has been put in your clipboard, happy pasting!",
                    type: "success",
                    closeOnConfirm:true,
                    confirmButtonText: "Ok",
                    timer: 1200
                });
            },
            function(err){
                window.prompt("Something went wrong with automatically copying the data to clipboard.\nPlease press CTRC + C to copy the data",plaintext );
          });
    }
}
...