Это немного странный случай, но, пожалуйста, выслушайте меня.
Я пытаюсь разработать расширение для добавления привязок клавиш для уже существующего веб-сайта. Сайт разработан на основе множества вложенных фреймов, которые загружаются и изменяются в ответ на отзывы пользователей. Мои горячие клавиши работали как пользовательский скрипт, загруженный в Tampermonkey, но когда я перенес точно такой же код в расширение Chrome, способ, которым слушатели событий верхнего уровня реагируют на события внутри iframes, совершенно другой.
In Tampermonkey, document.onkeydown
запускает соответствующий обратный вызов в ответ на любое нажатие клавиши внутри любого iframe, и с помощью инструментов разработчика Chrome я могу видеть прослушиватель событий в списке «Глобальных прослушивателей» для всей вкладки.
Точно такой же код в распакованном расширении Chrome регистрирует только слушатель на объекте документа верхнего уровня, и поэтому, если фокус находится внутри iframe, обратный вызов не выполняется.
В конечном счете, Помимо расширений Tampermonkey и Chrome, существует явный способ установить глобальный прослушиватель для всех элементов, независимо от того, находятся ли они внутри iframe или нет, без рекурсивного обхода их и добавления слушателя к каждому из них. один?
Я немного новичок в Javascript и веб-разработке в целом, поэтому извиняюсь, если это тупой вопрос.
(В основном) полный код здесь: https://pastebin.com/b6qnCMdL
Заранее спасибо!
РЕДАКТИРОВАТЬ: После немного больше копания, это может быть связано с различиями в том, как Tampermonkey сопоставляет URL-адреса с тем, как Chrome расширения соответствуют URL-адресам.