Разработка дополнений для Firefox: зарегистрируйте глобальные динамические настраиваемые сочетания клавиш - PullRequest
1 голос
/ 21 мая 2010

Мне было поручено разработать надстройку Firefox, способную регистрировать глобальные сочетания клавиш (которые будут работать во всех областях Firefox), которые откроют боковую панель и выполнят запрос XMLRPC на основе ранее записанных вход. Идея заключается в том, что будет много потенциальных запросов XMLRPC, которые пользователь захочет выполнить с помощью сочетания клавиш.

В настоящее время надстройка способна обрабатывать предварительно определенные статические сочетания клавиш с помощью наложения Firefox. Чего я хотел бы добиться, так это позволить пользователю регистрировать свои собственные динамические настраиваемые сочетания клавиш.

Существует дополнение, которое в настоящее время обладает некоторыми из этих функций, и называется Keyconfig . Я не заинтересован в том, чтобы просить пользователей установить второе дополнение для определения их собственных ярлыков. Также кажется, что использование метода регистрации динамических сочетаний клавиш в Keyconfig потребует от пользователя закрыть все окна Firefox, прежде чем динамический ярлык станет доступным.

То, что я хотел бы знать, это:

  • Является ли компонент XPCOM лучшим способом регистрации динамических сочетаний клавиш в дополнении Firefox?
  • Есть ли способ зарегистрировать сочетание клавиш, чтобы оно было немедленно доступно для всех окон Firefox, без необходимости предварительно закрывать окна?

1 Ответ

1 голос
/ 24 мая 2010

Я не могу ответить " Является ли компонент XPCOM лучшим способом регистрации динамических сочетаний клавиш из надстройки Firefox? ", но с помощью коллеги по работе у нас есть выяснил способ создания динамических сочетаний клавиш и их немедленного использования.

window.onkeypress = callback;

Будучи вопиющим хаком, он будет выполнять обратный вызов для каждого события нажатия клавиши, которое обрабатывает окно Chrome; он позволяет динамическому сочетанию клавиш в главном окне Firefox chrome без перезагрузки.

Чтобы это работало с определениями сочетаний клавиш на боковой панели, я создал прослушиватель в методе init () оверлея JavaScript, который прослушивает пользовательское событие с боковой панели:

init: function() {
    var sidebarElement = document.getElementById("sidebar");

    sidebarElement.addEventListener("fooKeyboardShortcut", function shortcutKeyListener(anEvent) {
        fooOverlay.shortcutMap = sidebarElement.contentWindow.foo.getShortcutKeysMap();
    }, true);
},

Объект на боковой панели затем запустит одно из этих событий при любом изменении состояния карты, в результате чего прослушиватель событий назначит карту объекту в оверлее Firefox. Ключ сопоставления представляет собой составной хэш следующих элементов данных события нажатия клавиши:

  • * 1014 клавишу Alt *
  • ctrlKey
  • metaKey
  • shiftKey
  • charCode

Здесь стоит отметить, что keyCode не может использоваться, так как кажется, что он все время имеет значение '0'; но charCode имеет правильное значение.

Значением для каждого ключа является ключ обратного вызова для объекта боковой панели для выполнения требуемого вызова XMLRPC.

Эта карта сочетаний клавиш запрашивается для каждого нажатия клавиши, и если есть совпадение; ключ обратного вызова используется для предварительно зарегистрированного обратного вызова боковой панели

...