Как ждать действий буфера обмена? - PullRequest
1 голос
/ 08 апреля 2019

В моем расширении Google Chrome я хочу что-то делать, когда пользователь нажимает клавиши CTRL + C или CTRL + X, то есть, в основном, при вырезании или копировании текста.Выключение события при нажатии этих клавиш не проблема, но поведение таково: копирование работает нормально, за исключением того факта, что оно отменяет выделение текста, но вырезание еще хуже.Он скопирует помеченный текст, но не будет вырезать / удалить текст, а просто отменит выделение текста, как с помощью функции копирования.

Что я здесь не так делаю?Нужно ли ждать окончания работы функции cut, прежде чем я начну работать с содержимым буфера обмена?

Это то, что у меня есть, включая функцию, которая должна задерживать выполнение скрипта (не работает, очевидно,):

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 Ответ

1 голос
/ 08 апреля 2019

Вы правы.Ваша функция тайм-аута ничего не делает.Единственное, что вы делаете, это задерживает выполнение анонимной функции в setTimeout ().Вы можете переместить свой код в эту функцию, но я очень сомневаюсь, что добавление задержки будет работать последовательно.Событие keyup - это просто keyUp.Что происходит после того, как кто-то догадывается.Вы можете подключиться к событию onCopy ;наверное со смешанным предложением.Также есть событие onCut .

Хотя я сам и пробую, копирующая часть работает в Firefox.Я подтвердил это, поместив console.log(copiedText); после var copiedText.Что-то еще не так с вашим кодом.

Еще одна вещь, CTRL используется только для копирования-вставки в Windows.На Mac это другой ключ (команда, называемая Windows Key или Super Key).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...