javascript - 如何动态安全地设置 XUL key ?

标签 javascript firefox-addon xul firefox-addon-restartless

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

我试图避免设置 commandoncommand 属性,因为我知道动态设置 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/

相关文章:

javascript - Firefox 扩展可以更改启动时的调用顺序吗?

javascript - 如何从 Firefox 扩展代码中获取本地 IP

javascript - 如何访问 Thunderbird 消息撰写窗口中的消息内容?

javascript - 根据距离和方向计算坐标

javascript - Firefox WebExtensions : can not get canceled request data

javascript - Firefox 插件 Javascript 对象管理

xml - 如何访问正确的 XUL 缩放更改值

javascript - 影响其父变量的变量

javascript - 如何使用 lodash 的 _sortBy() 按自定义要求按字母顺序排序此列表?

javascript - Angular2 + ag-Grid 无法加载 ag-grid-ng2/main.js (404 Not Found)