В моем расширении 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);
}
}
Ты прав. Ваша функция тайм-аута ничего не делает. Единственное, что вы делаете, это откладываете выполнение анонимной функции в setTimeout(). Вы можете переместить свой код в эту функцию, но я очень сомневаюсь, что добавление задержки будет работать последовательно. Событие keyup — это просто keyUp. Что будет после, можно только догадываться. Возможно, вы сможете подключиться к событию при копировании; вероятно, со смешанным предложением. Также есть событие onCut.
Однако, пробуя это сам, часть копирования, кажется, работает в Firefox. Я проверил это, поставив console.info(copiedText);
после var copiedText
. Что-то еще не так с вашим кодом.
Еще одна вещь, CTRL используется только для копирования-вставки в Windows. На Mac это другая клавиша (Command, она же Windows Key, она же Super Key).
О... Боже мой... Жаль, что я не знал об этих функциях раньше, это избавило бы меня от многих головных болей. Спасибо!