我正在尝试为我的引导附加组件动态创建一个关键元素。目前,我创建了一个keyset
元素并将其附加到document.getElementById('mainKeyset').parentNode
with appendChild()
然后创建key
元素 (myKey
)并将其附加到keyset
。我设置了key
's id
, modifiers
, and key
属性,然后执行myKey.addEventListener('command', function() {myFunction()});
添加一个函数到key
。之后我就可以成功调用myFunction()
通过做myKey.doCommand()
。但是,当我按下我在key
的属性,什么也没有发生。
我试图避免设置command
and oncommand
属性,因为我知道设置存在安全问题oncommand
动态地,但也许我确实需要以某种方式使用它们?我有看到它说 https://developer.mozilla.org/en-US/docs/XUL/key如果没有命令或 oncommand 设置,密钥就无法工作,因此也许无法在不设置其中之一的情况下动态创建密钥。如果我将 oncommand 设置为“void(0);”,我的事件监听器就会工作。 (按照给出的例子here http://blog.fpmurphy.com/2011/02/firefox-4-restartless-add-ons.html)。但是,我不知道类似的事情是否可以通过 Mozilla 的扩展审批流程。
有关声明<key>
元素需要一个command
or an oncommand
属性正确。看着触发按键处理程序的代码 http://hg.mozilla.org/mozilla-central/file/c190422547ed/content/xbl/src/nsXBLWindowKeyHandler.cpp#l498,它有一个优化,会忽略任何<key>
已禁用或既没有command
nor an oncommand
属性 - 所以command
这些元素甚至不会触发事件。我通过添加一个虚拟来解决这个问题oncommand
包含 JavaScript 注释的属性:
key.setAttribute("oncommand", "//");
But void(0);
当然作为属性值也很好。
对此进行审查不会有任何问题。您听说过的潜在安全问题正在产生oncommand
动态值,例如:
key.setAttribute("oncommand", "foo('" + bar + "')");
取决于值bar
(特别是当bar
来自网站)这可能非常危险。但是,您不会动态生成属性值,它总是void(0);
就你而言 - 所以没有问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)