我有一个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是否设置为正确的字符串,并将键设置为我想要使用的键。
我怎样才能按照我想要的方式实现这一目标?
答案 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);
完成此操作后,新的密钥组合将生效。