Я играю с расширением Firefox, которое:
1) Отображает всплывающую страницу расширения при нажатии Ctrl+Space
2) Всплывающая страница прослушивает событие keydown
,В зависимости от ключа, новый сайт загружается на новой вкладке браузера перед закрытием всплывающего окна.
Issue
Когда я нажимаю Ctrl+Space
, появляется всплывающее окнокак и ожидалось.Однако иногда кажется, что всплывающее окно не в фокусе, что означает, что все события нажатия клавиш пропущены.Когда я щелкаю внутри всплывающего окна, чтобы вернуть его в фокус, события нажатия клавиш фиксируются по желанию.
Это прерывистое поведение не происходит, если я показываю всплывающее окно, нажимая кнопку расширения.
Я не уверен, является ли это проблемой Firefox или нет.Кто-нибудь сталкивался с этой проблемой до и / или знает об обходном пути?
Редактировать: При дальнейшем исследовании прерывистое поведение происходит в основном, когда я быстро нажимаю Ctrl+Space
сразу после загрузки моего обработчика событий, открывает новую вкладку ссайт вроде https://www.youtube.com
или https://www.bbc.com/news
.Кажется, что это не происходит, когда обработчик событий загружает Google или StackOverflow.Возможно, сайты с тяжелой медиа-информацией как-то крадут фокус?
manifest.json
{
"manifest_version": 2,
"name": "QuickLinks",
"version": "0.2",
"description": "Create your own set of links for very quick access to your favorite sites.",
"icons": {
"48": "icons/QuickLinks48.png",
"96": "icons/QuickLinks96.png",
"128": "icons/QuickLinks128.png"
},
"permissions":
[
"activeTab",
"storage"
],
"browser_action": {
"browser_style": true,
"default_icon": "icons/QuickLinks48.png",
"default_title": "QuickLinks",
"default_popup": "popup/popup.html"
},
"options_ui": {
"browser_style": true,
"page": "options/options.html"
},
"applications": {
"gecko": {
"id": "58e78ac522594027d5362a36033ee5d0fdb48db1@quicklinks",
"strict_min_version": "57.0"
}
},
"commands": {
"_execute_browser_action": {
"suggested_key": {
"default": "Ctrl+Space"
}
}
}
}
popup.html
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="popup.css"/>
</head>
<body>
<div class="buttons">
<table id="links"></table>
<div class="options row">Show options</div>
</div>
<script src="popup.js"></script>
</body>
</html>
popup.js
document.addEventListener("keydown", (e) => {
console.log(`You pressed ${e.key}`)
e.stopPropagation();
e.preventDefault();
browser.tabs.create({url: "https://www.youtube.com"});
window.close();
});