如何等待剪贴板动作?

时间:2019-04-08 19:03:23

标签: javascript google-chrome-extension

在我的Google Chrome浏览器扩展程序中,我想在用户按下CTRL + C或CTRL + X时执行某项操作,因此基本上是每当他们剪切或复制文本时。按下这些键时不触发事件不是问题,但行为是:复制工作正常,除了取消选择文本这一事实外,但剪切效果更差。它会复制标记的文本,但不会剪切/删除文本,只是像选择复制功能一样取消选择文本。

我在这里做错了什么?在使用剪贴板内容之前,我是否需要等待剪切功能完成?

这就是我所拥有的,包括一个应该延迟脚本执行的功能(显然不起作用):

function doAdelay(){
    setTimeout(function(){return true;},30000);
};

var map = {};
onkeydown = onkeyup = function(e) {
  map[e.keyCode] = e.type == 'keydown';

    if(map[17] && (map[67] || map[88])) { // CTRL + C or X
        doAdelay();

        var copiedText = window.getSelection().toString();
        var tempTextArea = document.createElement('textarea');
        tempTextArea.setAttribute('readonly', '');
        tempTextArea.style.position = 'absolute';
        tempTextArea.style.left = '-9999px';
        document.body.appendChild(tempTextArea);

        tempTextArea.value = copiedText;
        tempTextArea.select();
        document.execCommand("copy");
        document.body.removeChild(tempTextArea);
    }
}

1 个答案:

答案 0 :(得分:1)

你是对的。您的超时功能无所作为。您唯一要做的就是延迟setTimeout()中的匿名函数执行。您可以将代码移到该函数中,但是我非常怀疑添加延迟是否会一直有效。 keyup事件就是keyUp。此后发生的事情是每个人的猜测。您也许可以加入onCopy事件;可能与混合建议。也有onCut事件。

尽管自己尝试一下,复制部分似乎可以在Firefox中使用。我通过在console.log(copiedText);之后放置var copiedText来验证这一点。您的代码有其他问题。

另一件事,CTRL仅用于Windows上的复制粘贴。在Mac上,它是不同的键(Command或Windows Key或Super Key)。