Sam*_* Su 34 javascript clipboard jquery google-chrome copy-paste
我知道这里有很多次问过这个问题,包括: 如何用JavaScript复制到剪贴板?或者如何使用jQuery将文本复制到客户端的剪贴板?,我缩小了范围:
条件:
有这样的解决方案或解决方法吗?
Jul*_*ire 27
您可以使用document.execCommand('copy')
或addEventListener('copy')
两者兼而有之.
1.复制自定义事件的选择
如果您想要触发copy
某个其他事件而不是ctrl-c
右键单击复制,则使用document.execCommand('copy')
.它将复制当前选择的内容.像这样,在mouseup上例如:
elem.onmouseup = function(){
document.execCommand('copy');
}
Run Code Online (Sandbox Code Playgroud)
编辑:
document.execCommand('copy'
)仅由支持Chrome 42
,IE9
以及Opera 29
(定于2015年9月),但将被火狐41支撑.请注意,IE通常会要求访问剪贴板的权限.
https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand
2.在用户触发的副本上复制自定义内容
或者,你可以使用addEventListener('copy')
,这会干扰复制事件,你可以把你想要的内容放在那里.这假设用户触发复制.
编辑:
在Chrome,Firefox和Safari上,事件具有方法clipboardData
对象setData
.在IE
,clipboardData
对象是窗口属性.所以这可以适用于所有主流浏览器,前提是您验证了哪里clipboardData
.
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');
}
});
Run Code Online (Sandbox Code Playgroud)
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');
}
});
Run Code Online (Sandbox Code Playgroud)
使用这最后一个假设这两种方法都是支持的,截至2015年7月,它只适用于Chrome 43
(可能42我无法测试)和IE
至少9和10.有了Firefox 41
支持execcommand('copy')
,它也应该工作.
请注意,对于大多数这些方法和属性都被声明为实验性的(或者甚至已经弃用于IE),所以要小心使用它,但它看起来越来越受支持.
摆弄所有例子:https://jsfiddle.net/jsLfnnvy/12/
如果您不介意IE/Safari,则可以使用以下(新)API:
var promise = navigator.clipboard.writeText(newClipText)
Run Code Online (Sandbox Code Playgroud)
小智 8
变量字符串可以使用下面的js代码复制到剪贴板.
var text = 'text to copy';
var copyFrom = $('<textarea/>');
copyFrom.css({
position: "absolute",
left: "-1000px",
top: "-1000px",
});
copyFrom.text(text);
$('body').append(copyFrom);
copyFrom.select();
document.execCommand('copy');
Run Code Online (Sandbox Code Playgroud)
实际上,对于那些想出这一点的人来说,我可以根据@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);
}
Run Code Online (Sandbox Code Playgroud)