Я нашел много решений для копирования в буфер обмена, но все они либо с флеш, либо со стороны сайтов. Я ищу автоматическое копирование метода в буфер обмена, без вспышки и для пользовательской стороны, это для пользовательских скриптов и, конечно же, кроссбраузерность.
javascript
jquery
clipboard
Черное солнце
источник
источник
Ответы:
Без вспышки это просто невозможно в большинстве браузеров. Буфер обмена пользователя является важным ресурсом, поскольку он может содержать такие вещи, как пароли или номера кредитных карт. Таким образом, браузеры по праву не разрешают Javascript доступ к нему (некоторые разрешают это с предупреждением, показанным, что пользователь подтвердил, или с подписанным кодом Javascript, но ни один из них не является кроссбраузерным).
источник
Я пробовал флеш-решение, и оно мне тоже не понравилось. Слишком сложно и слишком медленно. Я создал текстовое поле, поместил в него данные и использовал поведение браузера «CTRL + C».
Часть javascript jQuery:
// catch the "ctrl" combination keydown $.ctrl = function(key, callback, args) { $(document).keydown(function(e) { if(!args) args=[]; // IE barks when args is null if(e.keyCode == key && e.ctrlKey) { callback.apply(this, args); return false; } }); }; // put your data on the textarea and select all var performCopy = function() { var textArea = $("#textArea1"); textArea.text('PUT THE TEXT TO COPY HERE. CAN BE A FUNCTION.'); textArea[0].focus(); textArea[0].select(); }; // bind CTRL + C $.ctrl('C'.charCodeAt(0), performCopy);
Часть HTML:
<textarea id="textArea1"></textarea>
Теперь поместите то, что вы хотите скопировать, в «РАЗМЕСТИТЕ ТЕКСТ ДЛЯ КОПИРОВАНИЯ ЗДЕСЬ. МОЖЕТ БЫТЬ ФУНКЦИЕЙ ». площадь. У меня отлично работает. Вам просто нужно составить одну комбинацию CTRL + C. Единственный недостаток заключается в том, что на вашем сайте будет отображаться уродливое текстовое поле. Если вы используете style = "display: none", решение для копирования работать не будет.
источник
e.metaKey
в сравнение нажатия клавиш , но по какой-то причине действие копирования не запускается. См. Эту скрипку: jsfiddle.net/gableroux/gta67/1clipboard.js только что был выпущен для копирования в буфер обмена без использования Flash
Посмотрите здесь в действии> http://zenorocha.github.io/clipboard.js/#example-action
источник
Наконец-то он здесь! (Если вы не поддерживаете Safari или IE8 ... -_-)
Теперь вы можете обрабатывать действия с буфером обмена без Flash. Вот соответствующая документация:
https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand
https://developers.google.com/web/updates/2015/04/cut-and-copy-commands?hl=en
https://msdn.microsoft.com/en-us/library/hh801227%28v=vs.85%29.aspx#copy
источник
С нетерпением ожидая поддержки Xbrowser API буфера обмена ...
Это будет прекрасно работать в Chrome, Firefox, Edge, IE.
IE только один раз предложит пользователю получить доступ к буферу обмена.
Safari (5,1 на момент написания статьи) не поддерживает
execCommand
дляcopy/cut
/** * CLIPBOARD * https://stackoverflow.com/a/33337109/383904 */ const clip = e => { e.preventDefault(); const cont = e.target.innerHTML; const area = document.createElement("textarea"); area.value = e.target.innerHTML; // or use .textContent document.body.appendChild(area); area.select(); if(document.execCommand('copy')) console.log("Copied to clipboard"); else prompt("Copy to clipboard:\nSelect, Cmd+C, Enter", cont); // Saf, Other area.remove(); }; [...document.querySelectorAll(".clip")].forEach(el => el.addEventListener("click", clip) );
<a class="clip" href="#!">Click an item to copy</a><br> <a class="clip" href="#!"><i>Lorem</i></a><br> <a class="clip" href="#!"><b>IPSUM</b></a><br> <textarea placeholder="Paste here to test"></textarea>
Все браузеры (кроме Firefox , который способен обрабатывать только мимику типа
"plain/text"
, насколько я проверил) еще не реализованы в Clipboard API . То есть, пытаясь прочитать событие буфера обмена в Chrome, используяvar clipboardEvent = new ClipboardEvent("copy", { dataType: "plain/text", data: "Text to be sent to clipboard" });
throws: Uncaught TypeError: Незаконный конструктор
Лучший ресурс о невероятном беспорядке, который происходит между браузерами и буфером обмена, можно увидеть здесь (caniuse.com) (→ Следите за комментариями в разделе «Примечания» ).
MDN говорит, что базовая поддержка - «(ДА)» для всех браузеров, что неточно, потому что можно было бы ожидать, что хотя бы API вообще будет работать.
источник
Вы можете использовать буфер обмена, локальный для HTML-страницы. Это позволяет копировать / вырезать / вставлять контент ВНУТРИ HTML-страницы, но не из / в сторонние приложения или между двумя HTML-страницами.
Вот как вы можете написать настраиваемую функцию для этого (проверено в Chrome и Firefox):
Вот FIDDLE , демонстрирующий, как это можно сделать.
Я также вставлю сюда скрипку для справки.
HTML
<p id="textToCopy">This is the text to be copied</p> <input id="inputNode" type="text" placeholder="Copied text will be pasted here" /> <br/> <a href="#" onclick="cb.copy()">copy</a> <a href="#" onclick="cb.cut()">cut</a> <a href="#" onclick="cb.paste()">paste</a>
JS
function Clipboard() { /* Here we're hardcoding the range of the copy and paste. Change to achieve desire behavior. You can get the range for a user selection using window.getSelection or document.selection on Opera*/ this.oRange = document.createRange(); var textNode = document.getElementById("textToCopy"); var inputNode = document.getElementById("inputNode"); this.oRange.setStart(textNode,0); this.oRange.setEndAfter(textNode); /* --------------------------------- */ } Clipboard.prototype.copy = function() { this.oFragment= this.oRange.cloneContents(); }; Clipboard.prototype.cut = function() { this.oFragment = this.oRange.extractContents(); }; Clipboard.prototype.paste = function() { var cloneFragment=this.oFragment.cloneNode(true) inputNode.value = cloneFragment.textContent; }; window.cb = new Clipboard();
источник
window
. Это не настоящий буфер обмена, доступный для ОС и другой вкладки браузера. Также выбор можно легко сделать, используяselect()
и чем простоwindow.getSelection()
document.execCommand('copy')
буду делать то, что ты хочешь. Но в этой ветке не было примеров, которые можно было бы использовать напрямую, без мусора, так что вот он:var textNode = document.querySelector('p').firstChild var range = document.createRange() var sel = window.getSelection() range.setStart(textNode, 0) range.setEndAfter(textNode) sel.removeAllRanges() sel.addRange(range) document.execCommand('copy')
источник
Выхода нет, надо использовать вспышку. Существует плагин JQuery под названием jquery.copy, который обеспечивает кроссбраузерное копирование и вставку с использованием файла flash (swf). Это похоже на то, как работает подсветка синтаксиса в моем блоге.
После того, как вы укажете файл jquery.copy.js, все, что вам нужно сделать, чтобы поместить данные в буфер обмена, - это выполнить следующее:
$.copy("some text to copy");
Легко и приятно ;)
источник