编程语言
首页 > 编程语言> > javascript – 如何动态安全地设置XUL密钥?

javascript – 如何动态安全地设置XUL密钥?

作者:互联网

我正在尝试为我的bootstrapped附加组件动态创建一个关键元素.目前,我创建一个键集元素并将其附加到document.getElementById(‘mainKeyset’).parentNode with appendChild()然后创建键元素(myKey)并将其附加到键集.我设置了密钥的id,修饰符和键属性,然后执行myKey.addEventListener(‘command’,function(){myFunction()});向密钥添加功能.在此之后,我可以通过执行myKey.doCommand()成功调用myFunction().但是,当我按下我在键的属性中指定的修饰符和键时,没有任何反应.

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

解决方法:

关于< key>的声明需要命令或oncommand属性的元素是正确的.查看code triggering key handlers,它有一个优化,将忽略任何< key>要么已禁用,要么既没有命令也没有oncommand属性的元素 – 因此命令事件甚至不会为这些元素触发.我通过添加包含JavaScript注释的dummy oncommand属性来解决这个问题:

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

但是无效(0);当然也可以作为属性值.

审核后不会有任何问题.您听到的潜在安全问题是动态生成oncommand值,例如:

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

根据bar的值(特别是当栏来自网站时),这可能非常危险.但是,您不会动态生成属性值,它始终为void(0);在你的情况下 – 所以没有问题.

标签:javascript,firefox-addon,xul,firefox-addon-restartless
来源: https://codeday.me/bug/20190629/1327099.html