如何在Firefox中动态更改快捷键?

时间:2009-02-14 19:33:13

标签: javascript firefox xul

我有一个firefox扩展,可以通过快捷键激活。我希望用户能够动态更改密钥组合。

我的XUL看起来像这样

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

cmdDoMyThing是对命令集中元素的引用。当我按下ctrl + shift + e时,命令会触发。

我尝试修改现有元素并使用JavaScript创建新元素,但是虽然我可以将旧键组合用于停止工作,但我无法让新的元素发生。这是我正在使用的代码的一个例子

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 个答案:

答案 0 :(得分:1)

原来我还需要删除键集并创建一个全新的键集。

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);

完成此操作后,新的密钥组合将生效。