Прослушиватель клавиатуры Chrome с расширением Chrome
Я создаю расширение, которое позволит пользователям использовать хром-подобное переключение вкладок в браузере Vivaldi.
В моем background.js я пытался
addEventListener("keydown", function(e) {
console.log(e.code); // never gets here
})
Первоначально у меня было событие, обрабатываемое сценарием content.js, однако для этого требовалось полностью загрузить все новые вкладки, прежде чем я смогу отправлять сообщения в сценарий background.js.
function Listener()
{
this.stage = 0;
this.listen();
}
Listener.prototype.listen = function()
{
addEventListener("keydown", this.handleKeyDown);
addEventListener("keyup", this.handleKeyUp);
}
Listener.prototype.handleKeyDown = function(event)
{
for(var i = 0; i < 9; i++) {
if(event.ctrlKey) {
if(event.code == "Digit" + (i + 1)) {
chrome.runtime.sendMessage({
greeting: i
}, function(response) {
console.log(response);
})
}
}
}
}
new Listener();
Я хочу переместить эту функциональность в мой background.js, чтобы он работал независимо от действий браузера.
1 ответ
Слушатели событий клавиатуры DOM фиксируют только нажатия клавиш, которые происходят, когда фокус находится на странице.
Фоновая страница не может быть отображена и не может быть сфокусирована. Он никогда не получит никаких входных событий.
Вы можете посмотреть в chrome.commands
API, но это довольно ограничительное. По уважительной причине: вы действительно не хотите, чтобы расширения могли просто использовать все нажатия клавиш.
Вы можете частично обойти ограничения, используя (действительную) команду для вызова вашего расширения, которое откроет его всплывающее окно, которое, в свою очередь, может перехватывать дальнейшие события с помощью прослушивателей DOM.