使用Chrome中的jQuery / js复制到剪贴板
我知道这里有很多次问过这个问题,包括: 如何用JavaScript复制到剪贴板? 或者如何使用jQuery将文本复制到客户端的剪贴板? ,我缩小了范围:
条件:
- 在谷歌浏览器中工作正常(如果跨浏览器会很好,但不是必需的)
- 没有闪光
有这样的解决方案或解决方法吗?
您可以使用document.execCommand('copy')
或addEventListener('copy')
,或两者的组合。
1.在自定义事件上复制选择
如果要在除ctrl-c
或右键单击复制之外的其他事件上触发副本,则使用document.execCommand('copy')
。 它将复制当前选择的内容。 像这样,在mouseup上例如:
elem.onmouseup = function(){ document.execCommand('copy'); }
编辑:
document.execCommand('copy'
)仅由Chrome 42
, IE9
和Opera 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
对象。 在IE
, clipboardData
对象是一个窗口属性。 因此,如果您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
浏览器支持:
变量字符串可以使用下面的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); } }
然后使用文本调用该函数,这应该工作。