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)代码>在您的情况下-因此没有问题