2013-05-27 4 views
4

부트 스트래핑 된 애드온에 대해 핵심 요소를 동적으로 생성하려고합니다. 현재 keyset 요소를 만들고 document.getElementById('mainKeyset').parentNodeappendChild()을 추가 한 다음 key 요소 (myKey)를 만들고 keyset에 추가합니다. keyid, modifierskey 속성을 설정 한 다음 을 입력하여 key에 기능을 추가합니다. 이 후 myKey.doCommand()을 수행하여 myFunction() 번으로 전화를 걸 수 있습니다. 그러나, 내가 key의 속성에 할당 한 수정 자와 키를 누르면 아무 일도 일어나지 않습니다.XUL 키를 동적으로 안전하게 설정하는 방법은 무엇입니까?

commandoncommand 속성을 설정하지 않으려 고합니다. oncommand을 동적으로 설정하는 보안 문제가 있음을 알고 있기 때문에 어떻게 든 사용해야합니까? 나는 seen it stated에 명령이나 명령을 설정하지 않고는 키를 사용할 수 없다는 것을 알고 있으므로, 키를 동적으로 생성하지 못하게 될 수도 있습니다. oncommand를 "void (0);"로 설정하면 내 이벤트 수신기가 작동합니다. (주어진 예제 다음에 here). 그러나 모질라의 확장 승인 프로세스를 통과 할 수 있는지 여부는 알 수 없습니다.

답변

2

문 요구에 대한 <key> 요소 중 하나 command 또는 oncommand 속성이 올바른 것입니다. code triggering key handlers에서 보면 <key> 요소가 사용 중지되었거나 command 또는 oncommand 속성이 아니기 때문에이 요소는 무시됩니다. 따라서 command 이벤트는 이러한 요소에 대해 실행되지 않습니다. 나는 자바 스크립트 주석을 포함하는 더미 oncommand 속성을 추가하여이 문제를 해결 :

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

그러나 void(0);는 속성 값뿐만 아니라 물론 미세이다.

리뷰를 작성하는 데 문제가 없습니다. (bar 웹 사이트에서 오는 경우 특히) bar의 값에 따라 약 동적으로 oncommand 값을 생성들은 잠재적 인 보안 문제, 예컨대는 :

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

이 매우 위험 할 수 있습니다. 그러나 속성 값을 동적으로 생성하지는 않습니다. 귀하의 경우에는 항상 void(0);이므로 아무런 문제가 없습니다.