使用Chrome中的jQuery / js复制到剪贴板

我知道这里有很多次问过这个问题,包括: 如何用JavaScript复制到剪贴板? 或者如何使用jQuery将文本复制到客户端的剪贴板? ,我缩小了范围:

条件:

  1. 在谷歌浏览器中工作正常(如果跨浏览器会很好,但不是必需的)
  2. 没有闪光

有这样的解决方案或解决方法吗?

您可以使用document.execCommand('copy')addEventListener('copy') ,或两者的组合。

1.在自定义事件上复制选择

如果要在除ctrl-c或右键单击复制之外的其他事件上触发副本,则使用document.execCommand('copy') 。 它将复制当前选择的内容。 像这样,在mouseup上例如:

 elem.onmouseup = function(){ document.execCommand('copy'); } 

编辑:

document.execCommand('copy' )仅由Chrome 42IE9Opera 29支持,但将由firefox 41(计划于2015年9月)支持。 请注意,IE通常会要求访问剪贴板的权限。

https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand

2.在用户触发的副本上复制自定义内容

或者,您可以使用addEventListener('copy') ,这会干扰复制事件,您可以将所需内容放在那里。 这假设用户触发复制。

编辑:

在Chrome,Firefox和Safari上,事件具有带setData方法的clipboardData对象。 在IEclipboardData对象是一个窗口属性。 因此,如果您validationclipboardData位置,这可以在所有主流浏览器上运行。

  elem2.addEventListener('copy', function (e) { e.preventDefault(); if (e.clipboardData) { e.clipboardData.setData('text/plain', 'custom content'); } else if (window.clipboardData) { window.clipboardData.setData('Text', 'custom content'); } }); 

https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent/clipboardData https://msdn.microsoft.com/en-us/library/ms535220(v=vs.85).aspx

3.两者兼而有之

使用组合,您可以复制所需事件的自定义内容。 所以第一个事件触发execCommand ,然后listener干扰。 例如,单击div上的自定义内容。

  elem3.onclick = function () { document.execCommand('copy'); } elem3.addEventListener('copy', function (e) { e.preventDefault(); if (e.clipboardData) { e.clipboardData.setData('text/plain', 'custom content from click'); } else if (window.clipboardData) { window.clipboardData.setData('Text', 'custom content from click'); } }); 

使用这最后一个假设支持这两种方法,截至2015年7月,它仅适用于Chrome 43 (可能42我无法测试)和IE至少9和10.使用Firefox 41支持execcommand('copy') ,它应该也可以。

请注意,对于大多数这些方法和属性都被声明为实验性的(或者甚至不推荐用于IE),所以要小心使用它,但它看起来越来越受支持。

摆弄所有例子: https : //jsfiddle.net/jsLfnnvy/12/

我只是在Github找到另一个惊人的回购。

现代复制到剪贴板。 没有Flash。 只需3kb gzipped

https://github.com/zenorocha/clipboard.js

浏览器支持:

变量字符串可以使用下面的js代码复制到剪贴板。

 var text = 'text to copy'; var copyFrom = $(''); copyFrom.css({ position: "absolute", left: "-1000px", top: "-1000px", }); copyFrom.text(text); $('body').append(copyFrom); copyFrom.select(); document.execCommand('copy'); 

实际上,对于那些搞清楚这一点的人,我根据@JulianGregoire的回答让它在chrome中工作。

我重写了代码,使我的意见更好一些:

 el.onclick = function () { var copy = function (e) { e.preventDefault(); console.log('copy'); var text = "blabla" if (e.clipboardData) { e.clipboardData.setData('text/plain', text); } else if (window.clipboardData) { window.clipboardData.setData('Text', text); } } window.addEventListener('copy', copy); document.execCommand('copy'); window.removeEventListener('copy', copy); } 

注意:我尝试了与JulienGrégoire完全相同的脚本,但它没有触发oncopy事件监听器。 原因是,我有用户选择body标签的CSS。

因此,请确保将其删除,或将其设置为事件侦听器附加到的元素的initial

示例: https : //jsfiddle.net/faimmedia/jsLfnnvy/80/

如果你像我一样使用淘汰赛(由于某些原因我仍然是),你会想看看这个问题/答案:

如何让KnokoutJS和ClipboardJS一起工作?

 function copyToClipboard(s) { if (window.clipboardData && clipboardData.setData) { clipboardData.setData('text', s); } } 

然后使用文本调用该函数,这应该工作。