2012-10-22 2 views
2

내 Firefox 확장 프로그램에서 동적으로 팝업 메뉴를 만듭니다. functionName 함수의 이름을 가진 문자열입니다addEventListener 변수 함수 이름이 유효한 구문

menuFunc.setAttribute("oncommand","MainExtension.MyPlugin." + functionName + "();");

가 해당 메뉴 항목에 대한 호출 될 : 원래, 나는 각 메뉴 항목이 라인을 사용했다. 이것은 잘 동작했다. 내 확장 기능을 Mozilla Addons 페이지에 업로드 할 때 자동 코드 유효성 검사 프로그램에서이 행을 플래그로 지정하고 setAttribute를 사용하여 oncommand를 이러한 방식으로 설정하면 안전하지 않으며 addEventListener를 대신 사용해야한다고 말했습니다. 나는이 구문으로 전환 :

menuFunc.addEventListener("oncommand",function() {MainExtension.MyPlugin[functionName]},false);

하지만 메뉴 항목을 클릭하면 이제 아무 반응이 없습니다.

구문이 잘못되었거나 다른 것이 있습니까? 문제가 일반적인 'this'참조 오류라고 생각하지 않습니다. 나는 하나의 함수에서 'this'의 모든 사용을 제거하려했지만 여전히 작동하지 않았다. 함수가 전혀 호출되지 않는 것 같습니다. 오류도 생성되지 않습니다.

+0

해야 하는가 ' oncommand '가 될 수 없다. addEventListener를 사용할 때 'command'는 대개 ​​'on'접두사를 삭제합니다. – HBP

+0

흠, 코드에 문제가있을 수 있지만 "oncommand"를 "command"로 변경 한 후에도 아무런 변화가 없습니다. –

+0

아래의 대답에 대한 내 의견을 참조하십시오! –

답변

1

업데이트가 :

command 작업이 단지 command하지 oncommand 사용하여 부착 :

menuFunc.addEventListener("command", MainExtension.MyPlugin[functionName], false); 

당신은 할 수 있어야한다 그냥 수행

menuFunc.oncommand = MainExtension.MyPlugin[functionName]; 
+0

그것도 작동하지 않는 것 같아요, 그것은'setAttribute' 버전과 매우 비슷해 보이기 때문에 이상합니다. –

+0

함수가 있는지 확인할 수 있습니까? 'console.log (typeof MainExtension.MyPlugin [functionName]); ' – techfoobar

+0

그게 나에게 "함수"를 주므로, 함수가 존재하는 것처럼 보입니다. –

0

그냥 추측 : 이벤트를 캡처하려면 false 대신 true을 세 번째 매개 변수로 사용하는 것이 도움이 되나요?

+0

아니, 그건 도움이되지 않는 것 같습니다 :/ –

관련 문제