[英]How to set an XUL key dynamically and securely?
我正在嘗試為我的bootstrapped附加組件動態創建一個關鍵元素。 目前,我創建一個keyset
元素並將其附加到document.getElementById('mainKeyset').parentNode
with appendChild()
然后創建key
元素( myKey
)並將其附加到keyset
。 我設置了key
的id
, modifiers
和key
屬性,然后執行myKey.addEventListener('command', function() {myFunction()});
向key
添加功能。 在此之后,我可以通過執行myKey.doCommand()
成功調用myFunction()
myKey.doCommand()
。 但是,當我按下我在key
的屬性中指定的修飾符和鍵時,沒有任何反應。
我試圖避免設置command
和oncommand
屬性,因為我知道動態設置oncommand
存在安全問題,但是我可能需要以某種方式使用它們嗎? 我已經看到它聲明如果沒有命令或oncommand設置,密鑰就無法工作,所以也許不能在沒有設置其中一個的情況下動態創建密鑰。 如果我將oncommand設置為“void(0);”,我的事件監聽器就可以工作 (按照這里給出的例子)。 但是,我不知道這樣的事情是否可以通過Mozilla的擴展審批流程。
關於需要command
或oncommand
屬性的<key>
元素的聲明是正確的。 查看觸發鍵處理程序的代碼 ,它有一個優化,它將忽略任何被禁用或既沒有command
也沒有oncommand
屬性的<key>
元素 - 因此command
事件甚至不會觸發這些元素。 我通過添加包含JavaScript注釋的dummy oncommand
屬性來解決這個問題:
key.setAttribute("oncommand", "//");
但是void(0);
當然也可以作為屬性值。
審核后不會有任何問題。 您聽到的潛在安全問題是動態生成oncommand
值,例如:
key.setAttribute("oncommand", "foo('" + bar + "')");
根據bar
的值(特別是當bar
來自網站時),這可能非常危險。 但是,您不會動態生成屬性值,它始終為void(0);
在你的情況下 - 所以沒有問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.