2009-02-14 36 views
1

我有一个可以通过快捷键激活的Firefox扩展。我希望用户能够动态更改组合键。如何在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

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

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

一旦完成,新的组合键将生效。

+0

你提到了一个'调试器'。它是萤火虫你使用,还是别的? – montrealist 2009-02-16 15:17:24