我正在尝试为我的引导加载项动态创建一个关键元素。目前,我创建了一个 keyset
元素并将其附加到 document.getElementById('mainKeyset').parentNode
和 appendChild()
然后创建key
元素 (myKey
) 并将其附加到 keyset
。我设置了 key
的 id
、modifiers
和 key
属性,然后执行 myKey.addEventListener ('command', function() {myFunction()});
将函数添加到 key
。在此之后,我可以通过执行 myKey.doCommand()
成功调用 myFunction()
。但是,当我按下在 key
的属性中分配的修饰符和键时,没有任何反应。
我试图避免设置 command
和 oncommand
属性,因为我知道动态设置 oncommand
存在安全问题,但也许我确实需要以某种方式使用它们?我有 seen it stated如果没有命令或 oncommand 集, key 将无法工作,因此可能无法在不设置其中之一的情况下动态创建 key 。如果我将 oncommand 设置为“void(0);”,我的事件监听器就会工作(按照给定的示例 here )。但是,我不知道这样的东西是否能通过 Mozilla 的扩展批准程序。
最佳答案
关于<key>
的声明需要 command
的元素或 oncommand
属性正确。看着 code triggering key handlers , 它有一个优化会忽略任何 <key>
被禁用或既没有 command
的元素也不是 oncommand
属性 - 所以 command
这些元素甚至不会触发事件。我通过添加一个虚拟 oncommand
来解决这个问题包含 JavaScript 注释的属性:
key.setAttribute("oncommand", "//");
但是void(0);
当然也可以作为属性值。
审核此内容不会有任何问题。您听说的潜在安全问题正在生成 oncommand
动态值,例如:
key.setAttribute("oncommand", "foo('" + bar + "')");
取决于bar
的值(特别是当 bar
来自网站时)这可能非常危险。但是,您不会动态生成属性值,它始终是 void(0);
在你的情况下 - 所以没有问题。
关于javascript - 如何动态安全地设置 XUL key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16779316/