Переопределить прослушиватель keydown документа (из Closure) в скрипте пользователя? - PullRequest
2 голосов
/ 15 февраля 2012

Я пытаюсь написать пользовательский скрипт для переопределения сочетаний клавиш в веб-приложении.Используя инспектор Chrome DOM, я обнаружил, что обработчик ключа определяется как прослушиватель события keydown для объекта документа на этапе захвата.Как я понимаю модель события, любые прослушиватели фазы захвата на объекте документа будут выполняться раньше всех остальных, поэтому единственный способ запустить собственный прослушиватель до запуска по умолчанию - это установить его до инициализации веб-приложения.

Поэтому я написал скрипт пользователя с @run-at document-start для запуска

document.addEventListener("keydown", function(e){
  alert("foo");
  e.stopPropagation();
  e.stopImmediatePropagation();
}, true);

до того, как webapp установит свои собственные обработчики.По словам инспектора DOM, мой обработчик действительно первый, и действительно, когда я нажимаю клавишу в определенных частях страницы, я получаю предупреждение.Но в редакторе форматированного текста, который я пытаюсь «исправить», предупреждение полностью отсутствует.

Я также попытался добавить свою собственную замену Node.prototype.addEventHandler, чтобы перехватить вызов, который регистрирует обработчик-нарушитель, но, похоже,это закрытие не подходит для него (или есть другие проблемы с синхронизацией), поскольку к моменту загрузки страницы она возвращается к собственной функции, а не к моей замене.И нативный addEventHandler, по-видимому, делает невозможным проверку обработчиков, поэтому, насколько я могу судить, я никак не могу получить доступ к обработчику веб-приложения, чтобы изменить или удалить его.

Так что теперь яне хватает идей - как кто-то еще может поменять этот обработчик ключей?

...