4

我正在尝试为我的引导加载项动态创建一个关键元素。目前,我创建一个keyset元素并将其附加到document.getElementById('mainKeyset').parentNodewith appendChild(),然后创建key元素 ( myKey) 并将其附加到keyset. 我设置了key's idmodifierskey属性,然后myKey.addEventListener('command', function() {myFunction()});将函数添加到key. myFunction()在此之后,我可以通过做成功调用myKey.doCommand()。但是,当我按下我在key's 属性中分配的修饰符和键时,什么也没有发生。

我试图避免设置commandandoncommand属性,因为我知道动态设置存在安全问题oncommand,但也许我确实需要以某种方式使用它们?我已经看到它指出,如果没有命令或 oncommand 集,一个键就无法工作,所以如果不设置其中一个键,可能无法动态创建一个键。如果我将 oncommand 设置为“void(0);”,我的事件监听器就会工作 (按照此处给出的示例)。但是,我不知道这样的事情是否可以通过 Mozilla 的扩展审批流程。

4

1 回答 1

3

<key>关于需要 acommand或属性的元素的陈述oncommand是正确的。查看触发键处理程序的代码,它有一个优化,将忽略任何<key>被禁用或既没有 a command也没有oncommand属性的元素 - 所以command事件甚至不会为这些元素触发。oncommand我通过添加一个包含 JavaScript 注释的虚拟属性来解决这个问题:

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

但是void(0);当然也可以作为属性值。

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

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

根据bar(尤其bar是来自网站时)的价值,这可能非常危险。但是,您不会动态生成属性值,它总是void(0);在您的情况下 - 所以那里没有问题。

于 2013-05-28T07:57:27.057 回答