Как динамически изменить сочетание клавиш в Firefox? - PullRequest
1 голос
/ 14 февраля 2009

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

Мой XUL выглядит так

<keyset id="ksMain">
    <key id="keyDoMyThing" modifiers="control,shift" key="e" command="cmdDoMyThing"/>
</keyset>

cmdDoMyThing - ссылка на элемент в наборе команд. Когда я нажимаю Ctrl + Shift + E, команда запускается.

Я пытался как изменить существующий элемент, так и создать новый элемент с помощью JavaScript, но, хотя я могу заставить работать комбинацию старого ключа до stop , я не могу заставить работать новый. Вот пример кода, который я использую

keyelem = document.createElement('key');
keyelem.setAttribute('id', 'keyDoMyThing');
keyelem.setAttribute('command', 'cmdDoMyThing');
keyelem.setAttribute('key', key);
keyelem.setAttribute('modifiers', modstr);
keyset.appendChild(keyelem);

Я могу использовать отладчик, чтобы убедиться, что для modstr задана правильная строка, а для ключа - ключ, который я хочу использовать.

Как я могу сделать так, как бы я хотел?

1 Ответ

1 голос
/ 16 февраля 2009

Оказывается, мне тоже нужно удалить набор ключей и создать совершенно новый набор ключей.

ksparent = keyset.parentNode
ksparent.removeChild(keyset);

keyset = document.createElement('keyset');
keyset.id = 'my-keyset';

keyelem = document.createElement('key');
keyelem.setAttribute('id', 'keyDoMyThing');
keyelem.setAttribute('command', 'cmdDoMyThing');
keyelem.setAttribute('key', key);
keyelem.setAttribute('modifiers', modstr);

keyset.appendChild(keyelem);
ksparent.appendChild(keyset);

Как только это будет сделано, новая комбинация клавиш вступит в силу.

...