2016-12-28 6 views
0

Мне нужно скопировать текст в буфер обмена пользователей. Но по какой-то причине этот простой фрагмент не работает (печатает false)Javascript Copy Clipboard

<html> 
<head> 
</head> 
<body> 
<textarea id="clip">Test</textarea> 
<script> 

    var ta = document.getElementById('clip'); 
    ta.focus(); 
    ta.select(); 

    setTimeout(function() { 
     console.log(document.execCommand('copy')); 
    }, 1000); 

</script> 
</body> 
</html> 

Есть ли что-то, что я делаю неправильно? Любые идеи?

+1

Возможный дубликат [Как скопировать в буфер обмена в JavaScript?] (Http://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript) –

ответ

1

document.execCommand('copy') следует называть прямым результатом действия пользователя.

Например: click event handler.

Google DEV сообщение: https://developers.google.com/web/updates/2015/04/cut-and-copy-commands?hl=en

Update: Это выглядит как дубликат. Советую вам проверить следующий ответ по аналогичной теме: https://stackoverflow.com/a/30810322/4754887

0

Да, вы правы. Это работает

<!DOCTYPE html> 
<html> 
<head> 
</head> 
<body> 
<textarea id="clip" style="position: absolute; left: 100px; top: -100px;">Test</textarea> 
<button id="copyButton">Copy To Clipboard</button> 
<script> 

    document.getElementById('copyButton').addEventListener('click', function() { 

     var ta = document.getElementById('clip'); 

     ta.innerHTML = "Test2"; 

     ta.focus(); 
     ta.select(); 

     console.log(document.execCommand('copy')); 

    }); 

</script> 
</body> 
</html> 
0

..or проще:

<html> 
<head> 
</head> 
<body> 
<textarea id="clip" onclick="copyToClp()">Test</textarea><!-- this executes copyToClp() function on user's click --> 
<script> 

var ta = document.getElementById('clip'); 
ta.focus(); 
ta.select(); 

function copyToClp(){ 
    console.log(document.execCommand('copy')); 
} 

</script> 
</body> 
</html> 
0

На самом деле, вы должны использовать Document.execCommand() (как вы это делали) ВМЕСТЕ (так круто) JavaScript Selection API.

API выбора позволяет вам программно сделать выбор текста из любого элемента HTML на странице и работает точно так же, как нажатие CTRL + C на клавиатуре. Полезно быстро захватывать URL-адреса, длинные тексты, ключи SSH, одним щелчком мыши.

Вы можете попробовать что-то вроде этого:

var button = document.getElementById("yourButtonId"); 
var content = document.getElementById("yourContentElement"); 

button.addEventListener("click", function() { 
    // Define range and selection. 
    var range = document.createRange(); 
    var selection = window.getSelection(); 

    // Clear selection from any previous data. 
    selection.removeAllRanges(); 

    range.selectNodeContents(content); 
    selection.addRange(range); 

    // Copy to clipboard. 
    document.execCommand('copy'); 
}, false); 

Edit: Одно из преимуществ этого метода является то, что вы можете управлять содержимым в буфере обмена после того, как он был скопирован (спасаясь код, форматирование чисел или дат, верхний регистр , строчные буквы, изменение тегов HTML и т. д.).