将所选文本复制到剪贴板而不使用闪光灯 – 必须是跨浏览器的

我想有一个button,select文本中的textarea并将其复制到剪贴板。 我似乎无法find任何解决scheme,适用于所有浏览器,不使用闪存。

当然这是可行的? 我已经看到了所有的地方,但我想他们使用闪光灯,如果可能的话,我真的想远离,因为有些人没有。

这是我迄今为止 – 它只是select文本:

 function copyCode() { $("#output-code").focus(); $("#output-code").select(); } 

(重点不是绝对必要的)

将execCommand( '复制')

有一个非常新的select。 这是跨浏览器,但需要时间,直到每个人都更新了浏览器。

它通过使用document.execCommand('copy'); function。 有了这个function,你将复制select文本。 这不仅适用于textarea而且适用于网页上的每个选定文本(如spanpdiv等)。

可用于Internet Explorer 10+,Chrome 43 +,Opera 29+和Firefox 41+(请参阅此处的 execCommand兼容性)。

 // Setup the variables var textarea = document.getElementById("textarea"); var answer = document.getElementById("copyAnswer"); var copy = document.getElementById("copyBlock"); copy.addEventListener('click', function(e) { // Select some text (you could also create a range) textarea.select(); // Use try & catch for unsupported browser try { // The important part (copy selected text) var ok = document.execCommand('copy'); if (ok) answer.innerHTML = 'Copied!'; else answer.innerHTML = 'Unable to copy!'; } catch (err) { answer.innerHTML = 'Unsupported Browser!'; } }); 
 <textarea id="textarea" rows="6" cols="40"> Lorem ipsum dolor sit amet, eamsemper maiestatis no. </textarea><br/> <button id="copyBlock">Click to copy</button> <span id="copyAnswer"></span> 

您必须使用您不想用来自动将文本复制到客户端剪贴板的Flash加载项。 一个网站自动修改客户端的剪贴板没有active-x组件的帮助是一个安全问题。 请注意,active-x组件是在用户计算机上运行的程序,并且在技术上要求用户同意进行安装。 考虑到剪贴板是一个操作系统组件,请高兴的是,浏览器不允许网站在默认情况下劫持它。

如果用户没有Flash,禁用了Flash,或者禁用了active-x,那么他或她可能对安全性持偏执态度,并且不希望你用他或她的键盘搞乱。 在这一点上,用户将习惯于在网站中没有太多的自动或基于脚本的function。 最好不要公开藐视最终用户的意愿。

请参阅以下堆栈溢出链接:

  1. 如何在JavaScript中复制到剪贴板?
  2. 在JavaScript中跨浏览器Flash检测

最终的答案是使用零剪贴板,这是一个库,使用一个小的,不可见的Flash电影和JavaScript来使用剪贴板function,就像你想要的。 这个库可以在这里find: https : //github.com/zeroclipboard/zeroclipboard第二个链接显示了如何检测Flash是否被禁用或者没有安装,这允许你显示一个警告消息,就像你的JavaScript一样。

现在我们有@zenorocha的Clipboard.js

要使用它,请在page.html上下载并调用脚本(或者使用bower或npm进行安装)

 <script src="path_to_script/clipboard.min.js"></script> 

在你的script.js上实例化一个新的触发器

 new Clipboard('.trigger'); 

去那里看一些使用的例子:http: //zenorocha.github.io/clipboard.js/#usage

 function copyTextToClipboard(text) { var textArea = document.createElement("textarea"); textArea.style.position = 'fixed'; textArea.style.top = 0; textArea.style.left = 0; textArea.style.width = '2em'; textArea.style.height = '2em'; textArea.style.padding = 0; textArea.style.border = 'none'; textArea.style.outline = 'none'; textArea.style.boxShadow = 'none'; textArea.style.background = 'transparent'; textArea.value = text; textArea.id = 'ta'; document.body.appendChild(textArea); //textArea.select(); var range = document.createRange(); range.selectNode(textArea); textArea.select(); window.getSelection().addRange(range); try { var successful = document.execCommand('copy'); } catch (err) { alert('Oops, unable to copy'); } document.body.removeChild(textArea); return successful; } 

我希望这是有帮助的

这是一个相当晚的反应,但对于那些未来的search,并执行execCommand('复制')事件的麻烦,为桌面和移动设备的工作。

跨浏览器,移动友好,不需要有外部的来源或程序

 function CopyString(){ var StringToCopyElement = document.getElementById('YourId'); StringToCopyElement.select(); if(document.execCommand('copy')){ StringToCopyElement.blur(); }else{ CopyStringMobile(); } } function CopyStringMobile(){ document.getElementById("YourId").selectionStart = 0; document.getElementById("YourId").selectionEnd = 999; document.execCommand('copy'); if (window.getSelection) { if (window.getSelection().empty) { // Chrome window.getSelection().empty(); } else if (window.getSelection().removeAllRanges) { // Firefox window.getSelection().removeAllRanges(); } } else if (document.selection) { // IE? document.selection.empty(); } } 

将CopyString()函数设置为任何想要触发事件的单击事件。 这可以在移动和桌面操作系统上使用。

说明

您需要有两种不同的方式来select要复制的string,因为从今天起,通过桌面进行此操作的方法将不适用于移动设备。 我有一个if then函数来捕获桌面方法是否工作,如果没有,则触发可用于移动设备的代码。 这种方法不需要下载或链接。 两种方法都会突出显示要复制的文本,然后将复制命令触发到剪贴板,然后取消select要复制的string。 你可以混淆你的代码,但这是这样做的方式。