将所选文本复制到剪贴板而不使用闪光灯 – 必须是跨浏览器的
我想有一个button,select文本中的textarea
并将其复制到剪贴板。 我似乎无法find任何解决scheme,适用于所有浏览器,不使用闪存。
当然这是可行的? 我已经看到了所有的地方,但我想他们使用闪光灯,如果可能的话,我真的想远离,因为有些人没有。
这是我迄今为止 – 它只是select文本:
function copyCode() { $("#output-code").focus(); $("#output-code").select(); }
(重点不是绝对必要的)
将execCommand( '复制')
有一个非常新的select。 这是跨浏览器,但需要时间,直到每个人都更新了浏览器。
它通过使用document.execCommand('copy');
function。 有了这个function,你将复制select文本。 这不仅适用于textarea
而且适用于网页上的每个选定文本(如span
, p
, div
等)。
可用于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。 最好不要公开藐视最终用户的意愿。
请参阅以下堆栈溢出链接:
- 如何在JavaScript中复制到剪贴板?
- 在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。 你可以混淆你的代码,但这是这样做的方式。