17 ответов:
теперь есть способ легко сделать это в большинстве современных браузеров с помощью
document.execCommand('copy');будет скопирован текущий выделенный текст. Вы можете выбрать текстовое поле или поле ввода
document.getElementById('myText').select();для невидимого копирования текста вы можете быстро создать текстовую область, изменить текст в поле, выбрать его, скопировать его, а затем удалить текстовую область. В большинстве случаев это текстовое поле даже не будет мигать на экране.
по соображениям безопасности браузеры позволят вам копировать только если пользователь принимает какое-то действие (т. е. нажатие кнопки). Один из способов сделать это-добавить событие onClick в кнопку html, которая вызывает метод, который копирует текст.
полный пример будет выглядеть как
<html> <head> <title>copy test</title> </head> <body> <button onclick="copier()">Copy</button> <textarea id="myText">Copy me PLEASE!!!</textarea> <script> function copier(){ document.getElementById('myText').select(); document.execCommand('copy'); } </script> </body> </html>
по соображениям безопасности Firefox не позволяет размещать текст в буфере обмена. Тем не менее, есть обходной путь, доступный с помощью Flash.
function copyIntoClipboard(text) { var flashId = 'flashId-HKxmj5'; /* Replace this with your clipboard.swf location */ var clipboardSWF = 'http://appengine.bravo9.com/copy-into-clipboard/clipboard.swf'; if(!document.getElementById(flashId)) { var div = document.createElement('div'); div.id = flashId; document.body.appendChild(div); } document.getElementById(flashId).innerHTML = ''; var content = '<embed src="' + clipboardSWF + '" FlashVars="clipboard=' + encodeURIComponent(text) + '" width="0" height="0" type="application/x-shockwave-flash"></embed>'; document.getElementById(flashId).innerHTML = content; }единственным недостатком является то, что для этого требуется включить Flash.
источник в настоящее время мертв: http://bravo9.com/journal/copying-text-into-the-clipboard-with-javascript-in-firefox-safari-ie-opera-292559a2-cc6c-4ebf-9724-d23e8bc5ad8a/ (и так это Google cache)
электронные таблицы подключают события Ctrl+C, Ctrl+V и переносят фокус на скрытый элемент управления TextArea и либо устанавливают его содержимое в нужное новое содержимое буфера обмена для копирования, либо читают его содержимое после завершения события для вставки.
см. также можно ли читать буфер обмена в Firefox, Safari и Chrome с помощью Javascript?
Это лето 2015 года, и с такой суматохой вокруг Flash я подумал, что добавлю новый ответ на этот вопрос, который полностью избегает его использования.
буфер обмена.js - хорошая утилита, которая позволяет копировать текст или HTML-данные в буфер обмена. Это очень простой в использовании, просто включите .JS и использовать что-то вроде этого:
<button id='markup-copy'>Copy Button</button> <script> document.getElementById('markup-copy').addEventListener('click', function() { clipboard.copy({ 'text/plain': 'Markup text. Paste me into a rich text editor.', 'text/html': '<i>here</i> is some <b>rich text</b>' }).then( function(){console.log('success'); }, function(err){console.log('failure', err); }); }); </script>буфер обмена.js также включен GitHub
Firefox позволяет хранить данные в буфере обмена, но из-за последствий для безопасности он отключен по умолчанию. Узнать, как включить его в "предоставление JavaScript доступа к буферу обмена" в Базе знаний Mozilla Firefox.
решение, предлагаемое amdfan, является лучшим, если у вас много пользователей и настройка их браузера не является опцией. Хотя вы можете проверить, доступен ли буфер обмена и предоставить ссылку для изменения настроек, если пользователи технически подкованы. Редактор JavaScript TinyMCE следующий подход.
в 2017 году вы можете сделать это (говоря это, потому что эта нить почти 9 лет!)
function copyStringToClipboard (string) { function handler (event){ event.clipboardData.setData('text/plain', string); event.preventDefault(); document.removeEventListener('copy', handler, true); } document.addEventListener('copy', handler, true); document.execCommand('copy'); }а теперь копировать
copyStringToClipboard('Hello World')Если вы заметили
setDataлиния, и интересно, если вы можете установить различные типы данных ответ да.
функция copyIntoClipboard () работает для Flash 9, но она, похоже, нарушена выпуском Flash player 10. Вот решение, которое работает с новым Flash player:
http://bowser.macminicolo.net / ~jhuckaby / zeroclipboard/
Это сложное решение, но оно работает.
Я должен сказать, что ни одно из этих решений действительно работа. Я пробовал решение буфера обмена из принятого ответа, и он не работает с Flash Player 10. Я также пробовал ZeroClipboard, и я был очень доволен им на некоторое время.
в настоящее время я использую его на своем собственном сайте (http://www.blogtrog.com), но я замечал странные ошибки с ним. Способ работы ZeroClipboard заключается в том, что он помещает невидимый flash-объект поверх элемент на Вашей странице. Я обнаружил, что если мой элемент перемещается (например, когда пользователь изменяет размер окна, и у меня все выровнено), объект zeroclipboard flash выходит из строя и больше не покрывает объект. Я подозреваю, что он, вероятно, все еще сидит там, где он был первоначально. У них есть код, который должен остановить это или вернуть его в элемент, но он, похоже, не работает хорошо.
Так... в следующей версии BlogTrog, я думаю, я последую примеру со всем другим кодом маркеры я видел в дикой природе и снять свою копию в буфер обмена. : - (
(Я заметил, что dp.теперь также нарушена копия syntaxhiglighter в буфер обмена.)
слишком старый вопрос, но я нигде не видел этого ответа...
, проверьте эту ссылку:
http://kb.mozillazine.org/Granting_JavaScript_access_to_the_clipboard
как все сказали, По соображениям безопасности по умолчанию отключен. ссылка выше показывает Инструкции о том, как включить его (путем редактирования about:config в firefox или пользователя.js).
к счастью, есть плагин под названием "AllowClipboardHelper", который делает все проще с помощью всего нескольких щелчков мыши. однако вам все равно нужно проинструктировать посетителей вашего сайта о том, как включить доступ в firefox.
Я использовал GitHub это до для моих нужд, простая кнопка на основе Flash. Работает просто отлично, если один не нуждается в стилизации и доволен вставкой что надо вставить на стороне сервера заранее.
используйте современный документ.execCommand ("копировать") и jQuery. посмотреть в этом сайте StackOverflow ответ
var ClipboardHelper = { // as Object copyElement: function ($element) { this.copyText($element.text()) }, copyText:function(text) // Linebreaks with \n { var $tempInput = $("<textarea>"); $("body").append($tempInput); $tempInput.val(text).select(); document.execCommand("copy"); $tempInput.remove(); }};как звать:
ClipboardHelper.copyText('Hello\nWorld'); ClipboardHelper.copyElement($('body h1').first());// JQUERY DOCUMENT ;(function ( $, window, document, undefined ) { var ClipboardHelper = { copyElement: function ($element) { this.copyText($element.text()) }, copyText:function(text) // Linebreaks with \n { var $tempInput = $("<textarea>"); $("body").append($tempInput); //todo prepare Text: remove double whitespaces, trim $tempInput.val(text).select(); document.execCommand("copy"); $tempInput.remove(); } }; $(document).ready(function() { var $body=$('body'); $body.on('click', '*[data-copy-text-to-clipboard]', function(event) { var $btn=$(this); var text=$btn.attr('data-copy-text-to-clipboard'); ClipboardHelper.copyText(text); }); $body.on('click', '.js-copy-element-to-clipboard', function(event) { ClipboardHelper.copyElement($(this)); }); }); })( jQuery, window, document );<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <span data-copy-text-to-clipboard= "Hello World"> Copy Text </span> <br><br> <span class="js-copy-element-to-clipboard"> Hello World Element </span>
небольшое улучшение решения Flash заключается в обнаружении для flash 10 с помощью swfobject:
http://code.google.com/p/swfobject/
а затем, если он отображается как flash 10, попробуйте загрузить объект Shockwave с помощью javascript. Shockwave может читать / записывать в буфер обмена (во всех версиях), а также с помощью команды copyToClipboard () в lingo.
http://www.rodsdot.com/ee/cross_browser_clipboard_copy_with_pop_over_message.asp работает с Flash 10 и всеми браузерами с поддержкой Flash.
также ZeroClipboard был обновлен, чтобы избежать ошибки, упомянутой о прокрутке страницы, в результате чего Флэш-фильм больше не находится в правильном месте.
поскольку этот метод "требует", чтобы пользователь нажал кнопку, чтобы скопировать это удобство для пользователя, и ничего гнусного не происходит.
Если вы поддерживаете вспышку, вы можете использовать https://everyplay.com/assets/clipboard.swf и используйте текст flashvars, чтобы установить текст
https://everyplay.com/assets/clipboard.swf?text=It%20Works
вот тот, который я использую для копирования, и вы можете установить как дополнительный, если не поддерживает эти параметры, которые вы можете использовать:
Для Internet Explorer:
из аддона код:
в случае, если кто-то еще искал, как это сделать из кода chrome, вы можете использовать интерфейс nsIClipboardHelper, как описано здесь:https://developer.mozilla.org/en-US/docs/Using_the_Clipboard
использовать
document.execCommand('copy'). Поддерживается в последних версияхChrome,Firefox,EdgeиSafari.function copyText(text){ function selectElementText(element) { if (document.selection) { var range = document.body.createTextRange(); range.moveToElementText(element); range.select(); } else if (window.getSelection) { var range = document.createRange(); range.selectNode(element); window.getSelection().removeAllRanges(); window.getSelection().addRange(range); } } var element = document.createElement('DIV'); element.textContent = text; document.body.appendChild(element); selectElementText(element); document.execCommand('copy'); element.remove(); } var txt = document.getElementById('txt'); var btn = document.getElementById('btn'); btn.addEventListener('click', function(){ copyText(txt.value); })<input id="txt" value="Hello World!" /> <button id="btn">Copy To Clipboard</button>
попробуйте создать глобальную переменную памяти, хранящую выделение, тогда другая функция может получить доступ к переменной и сделать вставку, например..
var memory = '';//outside the functions but within the script tag. function moz_stringCopy(DOMEle,firstPos,secondPos) { var copiedString = DOMEle.value.slice(firstPos, secondPos); memory = copiedString; } function moz_stringPaste(DOMEle, newpos) { DOMEle.value = DOMEle.value.slice(0,newpos) + memory + DOMEle.value.slice(newpos); }
Comments