2013-05-27 17 views
4

我正在尝试为我的引导加载项动态创建一个关键元素。目前,我创建keyset元素并将其附加到document.getElementById('mainKeyset').parentNodeappendChild(),然后创建key元素(myKey)并将其附加到keyset。我设置了keyid,modifierskey属性,然后执行myKey.addEventListener('command', function() {myFunction()});key添加函数。在此之后,我可以通过做myKey.doCommand()成功拨打myFunction()。但是,当我按下我在key的属性中指定的修饰符和键时,什么都不会发生。如何动态和安全地设置XUL密钥?

我试图避免设置commandoncommand属性,因为我知道动态设置oncommand存在安全问题,但也许我需要以某种方式使用它们?我有seen it stated,如果没有命令或oncommand设置,密钥无法工作,所以也许无法设置其中一个密钥就无法动态创建密钥。如果我将oncommand设置为“void(0);”,则我的事件侦听器有效(按照给出的示例here)。但是,我不知道这样的事情是否可以通过Mozilla的扩展审批流程。

回答

2

声明需要大约<key>元件或者是commandoncommand属性是正确的。查看code triggering key handlers,它有一个优化,将忽略任何<key>元素被禁用或既没有command也没有oncommand属性 - 因此command事件甚至不会触发这些元素。我解决这个添加含有JavaScript注释虚拟oncommand属性:

key.setAttribute("oncommand", "//"); 

void(0);是罚款,属性值以及课程。

这将不会有任何问题得到审查。你听说过是动态生成oncommand价值的潜在的安全问题,例如:

key.setAttribute("oncommand", "foo('" + bar + "')"); 

取决于bar价值(特别是当bar来自网站)这是非常危险的。但是,您不会动态生成属性值,您的情况始终是void(0); - 因此没有问题。