Как дождаться действия буфера обмена?

#javascript #google-chrome-extension

#javascript #google-chrome-расширение

Вопрос:

В моем расширении 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] amp;amp; (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:

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

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

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

Комментарии:

1. О … мой … бог… Жаль, что я не знал об этих функциях раньше, это могло бы избавить меня от многих головных болей. Спасибо!