Я столкнулся с проблемой, касающейся событий клавиатуры, таких как событие keydown .Приложение представляет собой одностраничное веб-приложение, полностью построенное с использованием JavaScript и манипуляций с DOM.
Вся обработка клавиатуры выполняется одним обработчиком, добавленным в документ с использованием.
document.addEventListener("keydown", handler, true);
Этот обработчик затем декодируетсобытие клавиатуры и делегирует внутренний код ключа в инфраструктуру приложения.
Дерево DOM состоит только из элементов DIV и текстовых узлов.
Теперь, когда добавляется iframe с внешним HTML-документом, и онсодержит элементы, которые могут получить фокус, обойденный исходным обработчиком.Единственный способ восстановить поток ключевых событий в исходном обработчике - установить фокус на основной документ.
Таким образом, создается впечатление, что новый документ, добавленный с помощью iframe, обходит цепочку событий захвата / всплытия из исходного документа..
Это было проверено в Chrome для справки, но само приложение работает во встроенном веб-браузере в телевизионной приставке, веб-браузер основан на Webkit.
В телевизионной приставкеВ окне отсутствует интерфейс мыши, поэтому единственным вводом являются события клавиш с пульта.Это создает для нас проблему, поскольку мы не хотим потерять контроль над ключевыми событиями, когда загружаем другие страницы с помощью iframe.
Единственное решение - использовать обработчик событий для манипулирования DOM и определять, когда iframeдобавили и добавили обработчик событий главного ключа во вновь вставленный документ?Или есть метод, который гарантирует, что обработчик ключевых событий всегда получает все ключевые события в окне браузера.
EDIT
Я только что понял, что можно добавить обработчики событийк объекту окна, я также попробую это.
РЕДАКТИРОВАТЬ
Добавление обработчика события ключа к объекту окна ничего не изменило.