使用 JavaScript,是否可以检测用户何时从网页复制文本,然后将复制的文本存储在数组中(不覆盖 CTRL+V 组合键,并且不阻止复制文本)?
换句话说,是否可以在不覆盖该组合键的默认行为的情况下检测组合键?
使用 JavaScript,是否可以检测用户何时从网页复制文本,然后将复制的文本存储在数组中(不覆盖 CTRL+V 组合键,并且不阻止复制文本)?
换句话说,是否可以在不覆盖该组合键的默认行为的情况下检测组合键?
在 jQuery 中使用keyup
侦听器并获取事件参数ctrlKey
,keyCode
然后通过以下方式检索选定的文本window.getSelection()
:
$(window).keyup(function (e) {
if (e.ctrlKey && e.keyCode === 67) {
alert("Text copied was: " + window.getSelection());
}
});
return false
除非您在监听函数中(或者,在 jQuery 中,e.preventDefault()
实际上(和在代码中)执行与 相同的事情) ,否则不会干扰击键的默认行为return false
。
您可以轻松获取复制和粘贴击键,您对它们的操作取决于您。
document.addEventListener("keyup", function(e) {
if (e.ctrlKey && e.keyCode == 67) {
console.log("CTRL + C");
}
if (e.ctrlKey && e.keyCode == 86) {
console.log("CTRL + V");
}
});
我在一个库中工作,该库捕获复制/剪切事件并存储每条复制/剪切文本:https ://github.com/jasonzissman/CopyMe.js 。它不会干扰正常的复制/剪切行为,它允许您为复制/剪切事件设置处理程序,并且您可以检索用户复制/剪切的所有文本的整个数组。
目前,接受的答案(同时捕获“ctrl”和“c”键)似乎只有在用户同时按下两个键时才有效。Chrome(或者可能是 Windows)似乎对 ctrl + c 所涉及的时间更加宽容,因为您仍然可以通过在按 c 之前按 ctrl 来成功复制数据。即使 Chrome(同样,可能是 Windows 的东西)说您已成功复制,JavaScript 事件也无法捕捉到该操作。
示例用法:
CopyMe.setCopyCallback(function(copiedText){
// Do something here when text is copied
alert(copiedText);
});
CopyMe.setCutCallback(function(cutText){
// Do something here when text is cut
alert(cutText);
});
var allCopiedCutText = CopyMe.getAllCopiedOrCutText();
var lastCopiedCutText = CopyMe.getLastCopiedOrCutText();