Javascript 如何动态安全地设置XUL密钥?

Javascript 如何动态安全地设置XUL密钥?,javascript,firefox-addon,xul,firefox-addon-restartless,Javascript,Firefox Addon,Xul,Firefox Addon Restartless,我正在尝试为我的引导加载项动态创建一个关键元素。目前,我使用appendChild()创建一个keyset元素并将其附加到document.getElementById('mainKeyset').parentNode,然后创建key元素(myKey)并将其附加到keyset。我设置key的id、修饰符和key属性,然后执行myKey.addEventListener('command',function(){myFunction()})向键添加功能。在此之后,我可以通过执行myKey.doco

我正在尝试为我的引导加载项动态创建一个关键元素。目前,我使用
appendChild()
创建一个
keyset
元素并将其附加到
document.getElementById('mainKeyset').parentNode
,然后创建
key
元素(
myKey
)并将其附加到
keyset
。我设置
key
id
修饰符
key
属性,然后执行
myKey.addEventListener('command',function(){myFunction()})
键添加功能。在此之后,我可以通过执行
myKey.docomand()
成功调用
myFunction()
。但是,当我按下在
键的属性中指定的修改器和键时,什么也没有发生


我试图避免设置
命令
oncommand
属性,因为我知道动态设置
oncommand
存在安全问题,但也许我确实需要以某种方式使用它们?我知道,没有command或oncommand set键就无法工作,因此,如果不设置其中一个,可能无法动态创建键。如果我将oncommand设置为“void(0);”(遵循给出的示例),则我的事件侦听器可以工作。但是,我不知道这样的东西是否能通过Mozilla的扩展批准流程。

关于
元素需要
命令
命令
属性的声明是正确的。查看,它有一个优化,将忽略任何已禁用或既没有
命令
也没有
oncommand
属性的
元素-因此这些元素甚至不会触发
命令
事件。我通过添加一个包含JavaScript注释的伪
oncommand
属性来解决这个问题:

key.setAttribute(“oncommand”、“/”);
void(0)当然也可以作为属性值

对其进行审查不会有任何问题。您听说的潜在安全问题是动态生成
oncommand
值,例如:

key.setAttribute(“oncommand”、“foo(“+bar+”)”);
根据
bar
的值(尤其是
bar
来自网站时),这可能非常危险。但是,您不会动态生成属性值,它总是
void(0)在您的情况下-因此没有问题