簡體   English   中英

如何動態安全地設置XUL密鑰?

[英]How to set an XUL key dynamically and securely?

我正在嘗試為我的bootstrapped附加組件動態創建一個關鍵元素。 目前,我創建一個keyset元素並將其附加到document.getElementById('mainKeyset').parentNode with appendChild()然后創建key元素( myKey )並將其附加到keyset 我設置了keyidmodifierskey屬性,然后執行myKey.addEventListener('command', function() {myFunction()}); key添加功能。 在此之后,我可以通過執行myKey.doCommand()成功調用myFunction() myKey.doCommand() 但是,當我按下我在key的屬性中指定的修飾符和鍵時,沒有任何反應。

我試圖避免設置commandoncommand屬性,因為我知道動態設置oncommand存在安全問題,但是我可能需要以某種方式使用它們嗎? 我已經看到它聲明如果沒有命令或oncommand設置,密鑰就無法工作,所以也許不能在沒有設置其中一個的情況下動態創建密鑰。 如果我將oncommand設置為“void(0);”,我的事件監聽器就可以工作 (按照這里給出的例子)。 但是,我不知道這樣的事情是否可以通過Mozilla的擴展審批流程。

關於需要commandoncommand屬性的<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM