使用FireFox,Safari和Chrome在剪贴板上复制/放置文本

在Internet Explorer中,我可以使用clipboardData对象来访问剪贴板。 我如何在FireFox,Safari和/或Chrome中执行此操作?

现在有一种方法可以在大多数现代浏览器中轻松使用

 document.execCommand('copy'); 

这将复制当前选定的文本。 您可以使用select一个textArea或input字段

 document.getElementById('myText').select(); 

为了不可见地复制文本,您可以快速生成一个textArea,修改该文本框,选中它,复制它,然后删除textArea。 在大多数情况下,这个文本区域甚至不会闪到屏幕上。

出于安全原因,浏览器将只允许您复制,如果用户采取某种行动(即点击一个button)。 一种方法是将一个onClick事件添加到一个调用复制文本的方法的htmlbutton。

一个完整的例子看起来像

 <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/ (那么这是谷歌caching )

在线电子表格挂钩Ctrl + C,Ctrl + V事件并将焦点转移到隐藏的TextArea控件,并将其内容设置为所需的新剪贴板内容以进行复制,或在事件完成粘贴后读取其内容。

另请参阅使用Javascript可以在Firefox,Safari和Chrome中阅读剪贴板吗?

现在是2015年夏天,围绕着Flash这么多的动荡,我想我会为这个问题添加一个新的答案,以避免它的使用。

clipboard.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> 

clipboard.js也在GitHub上

Firefox确实允许您将数据存储在剪贴板中,但由于安全隐患,默认情况下它是禁用的。 了解如何在Mozilla Firefox知识库中的“授予对剪贴板的JavaScript访问权限”中启用它。

由amdfan提供的解决scheme是最好的,如果你有很多的用户和configuration他们的浏览器不是一个选项。 虽然您可以testing剪贴板是否可用,并提供更改设置的链接,但用户是否懂技术。 JavaScript编辑器TinyMCE遵循这种方法。

copyIntoClipboard()函数适用于Flash 9,但它似乎被Flash player 10的发行版所打破。下面是一个解决scheme,可以使用新的Flash Player:

http://bowser.macminicolo.net/~jhuckaby/zeroclipboard/

这是一个复杂的解决scheme,但它确实有效。

在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行,并想知道是否可以设置不同的数据types,答案是肯定的。

我不得不说,这些解决scheme真的没有工作。 我已经从接受的答案中尝试了剪贴板解决scheme,并且它不适用于Flash Player 10.我也尝试了ZeroClipboard,我对它有一段时间非常满意。

我目前正在使用它在我自己的网站( http://www.blogtrog.com ),但我一直注意到它的怪异的错误。 ZeroClipboard的工作方式是将一个隐形的Flash对象放在页面元素的顶部。 我发现,如果我的元素移动(如当用户调整窗口大小,我有东西右alignment),ZeroClipboard闪存对象出来的重击,不再覆盖的对象。 我怀疑它可能仍然坐在原来的位置。 他们有代码应该停止,或重新启动元素,但它似乎不工作。

所以…在BlogTrog的下一个版本中,我想我会跟随所有其他代码荧光笔,我已经看到在野外,并删除我的复制到剪贴板button。 🙁

(我注意到,dp.syntaxhiglighter的复制到剪贴板现在也被打破。)

方式太旧的问题,但我没有看到这个答案在任何地方…

检查这个链接:

http://kb.mozillazine.org/Granting_JavaScript_access_to_the_clipboard

就像大家所说的那样,出于安全的原因默认是禁用的。 上面的链接显示了如何启用它的指示(通过在Firefox或user.js中编辑about:config)。

幸运的是,有一个名为“AllowClipboardHelper”的插件,只需点击几下就可以让事情变得更简单。 但是你仍然需要指导你的网站的访问者如何在Firefox中启用访问。

我已经使用Github的Clippy来满足我的需求,简单的基于Flash的button。 工作得很好,如果一个不需要样式,并且事先插入在服务器端插入的东西感到高兴。

使用现代的document.execCommand(“复制”)和jQuery。 看到这个计算器的答案

 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解决scheme的一个小改进是使用swfobject检测flash 10:

http://code.google.com/p/swfobject/

然后如果它显示为Flash 10,请尝试使用JavaScript加载Shockwave对象。 Shockwave可以读/写剪贴板(所有版本),也可以使用copyoClipboard()命令。

http://www.rodsdot.com/ee/cross_browser_clipboard_copy_with_pop_over_message.asp适用于Flash 10和所有支持Flash的浏览器。

此外,ZeroClipboard已更新,以避免页面滚动提到的错误导致Flash电影不再在正确的位置。

由于该方法“需要”用户点击button来复制,这对用户来说是一种方便,并没有什么恶意的事情正在发生。

如果您支持Flash,则可以使用https://everyplay.com/assets/clipboard.swf并使用flashvars文本设置文本;

https://everyplay.com/assets/clipboard.swf?text=It%20Works

多数民众赞成在我用来复制,你可以设置为额外的,如果不支持这些选项,你可以使用:

对于Internet Explorer: window.clipboardData.setData(DataFormat,Text)和window.clipboardData.getData(DataFormat)

你可以使用DataFormat的Text和Url来获取数据和setData。

并删除数据:

您可以使用DataFormat的文件,HTML,图像,文本和URL。 PS:你需要使用window.clipboardData.clearData(DataFormat);

而对于其他不支持window.clipboardData和SWF的Flash文件,你也可以在你的键盘上使用control + cbutton来控制windows和mac的command + c

从插件代码:

如果其他人正在寻找如何从chrome代码中执行此操作,则可以使用nsIClipboardHelper接口,如下所述: https : //developer.mozilla.org/en-US/docs/Using_the_Clipboard

使用document.execCommand('copy') 。 支持最新版本的ChromeFirefoxEdgeSafari

 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> 

尝试创build一个内存全局variables存储的select,然后其他function可以访问variables,并做一个粘贴例如..

 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); }