#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. О … мой … бог… Жаль, что я не знал об этих функциях раньше, это могло бы избавить меня от многих головных болей. Спасибо!