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

В моем расширении 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);
    }
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
275
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Synn Ko 09.04.2019 10:15

Другие вопросы по теме