копировать в буфер обмена - не работает в 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!");
}
}

5 ответов


W3C clipboard api реализован всеми браузерами http://caniuse.com/#feat=clipboard


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

посмотрите на эту библиотеку 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


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

пожалуйста, смотрите эту ветку: Как скопировать в буфер обмена в JavaScript?


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

нет стандартов, которые применяются здесь.

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

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

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


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

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 Store) - > хорошие новости для разработчиков Android
  • в Firefox
  • Safari (только для Mac)

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

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

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