1

我有一个可以通过快捷键激活的 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 是否设置为正确的字符串,并且 key 是否设置为我要使用的密钥。

我怎样才能以我想要的方式实现这一点?

4

1 回答 1

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

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

于 2009-02-16T15:09:43.100 回答