1

使用 JavaScript,是否可以检测用户何时从网页复制文本,然后将复制的文本存储在数组中(不覆盖 CTRL+V 组合键,并且不阻止复制文本)?

换句话说,是否可以在不覆盖该组合键的默认行为的情况下检测组合键?

4

3 回答 3

3

在 jQuery 中使用keyup侦听器并获取事件参数ctrlKeykeyCode然后通过以下方式检索选定的文本window.getSelection()

$(window).keyup(function (e) {
    if (e.ctrlKey && e.keyCode === 67) {
        alert("Text copied was: " + window.getSelection());
    }
});

http://jsfiddle.net/G5kAG/1/


return false除非您在监听函数中(或者,在 jQuery 中,e.preventDefault()实际上(和在代码中)执行与 相同的事情) ,否则不会干扰击键的默认行为return false

于 2013-05-16T18:02:03.043 回答
1

您可以轻松获取复制和粘贴击键,您对它们的操作取决于您。

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");
  }
});
于 2013-05-16T18:00:21.870 回答
0

我在一个库中工作,该库捕获复制/剪切事件并存储每条复制/剪切文本: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();
于 2015-02-05T15:03:47.333 回答