Копировать в буфер обмена - не работает в FF, Chrome

Я использую приведенный ниже javascript для копирования текста в буфер обмена. Он работает в IE, но не работает в Firefox и Chrome.

Пожалуйста, советую мне, что не так?

   function setDataToclipboard() 
{

var str=document.getElementById("populatedString").value; 

if (window.clipboardData && clipboardData.setData) {
    clipboardData.setData("Text", str);
    alert("Copied!");
}
}

Ответ 2

Обработка буфера обмена не является кросс-браузером. Для кросс-браузерного решения вам нужна вспышка.

Посмотрите на эту библиотеку https://github.com/jonrohan/ZeroClipboard

Вы можете использовать ZeroClipboard следующим образом:

<button id="my-button" data-clipboard-text="Copy me!">Copy to Clipboard</button>
<script>
    var clip = new ZeroClipboard(document.getElementById('my-button'));
</script>

Когда вы нажимаете на кнопку, текст Copy me! будет помещен в буфер обмена.

Для дальнейших инструкций проверьте библиотечный API https://github.com/jonrohan/ZeroClipboard/blob/master/docs/instructions.md

Ответ 3

Я думаю, что window.clipboardData - это только IE. Доступ к буферу является проблемой безопасности и, следовательно, не может быть легко выполнен в FF или Chrome.

См. эту тему: Как скопировать в буфер обмена в JavaScript?

Ответ 4

Смотрите документацию для clipboardData, в частности раздел, который гласит:

Здесь нет стандартов.

Вы используете проприетарные Microsoft gubbins, поэтому не следует ожидать работы с другими браузерами.

См. этот вопрос для кросс-браузерных методов доступа к буферу.

Существует черновик стандарта для доступа к буферу, но я не знаю о его реализации в дикой природе (и canIuse не знает ни об этом).

Ответ 5

У меня была такая же проблема с Chrome и другими браузерами в последнее время. Однако недавно я обнаружил, что этот код работает в контентном поле в некоторых браузерах:

clipboard = e.originalEvent.clipboardData;
clipboard.setData('text/plain', plainData);
clipboard.setData('text/html', htmlData);

ПРИМЕЧАНИЕ: e в этом случае является событием копирования и/или вырезания. Это событие срабатывает и восстанавливается в действии onCopy() или onCut().

Этот код подтвержден для работы в последних версиях следующих браузеров:

  • Chrome (ПК/Mac и Android)
  • Android 4.4+ WebView (пока вы обновляетесь в Play Маркете) → хорошие новости для Android Devs
  • Firefox
  • Safari (только для Mac)

Internet Explorer, похоже, работает с window.clipboardData.setData вместо этого, но имейте в виду, что буфер обмена IE будет принимать только данные 'text' и 'url'.

В то время как следующие браузеры могут обращаться к объекту системного буфера обмена, они не могут установить данные в буфер обмена, используя clipboard.setData:

  • MS Edge
    • предоставляет объект UntrustedDragDrop в буфер обмена...
    • также, setData возвращает true... когда он не работает. setData возвращает undefined во всех других браузерах
  • Android WebView → ниже 4.4
  • iOS Safari и WebView - yay iOS!

Ответ 6

Я обнаружил, что они не работают в Chrome или FF:

тип = "скрытый"

<input id="e" type="hidden" value="my text to copy to clipboard" />

стиль = "дисплей: нет;"

<input id="e" type="text" style="display:none;" value="my text to copy to clipboard" />

обмануть браузер этим

style = "position: absolute; top: -30;"

<input id="e" type="text" style="position: absolute; top: -30;" value="my text" />