2011-12-07 3 views
1

저는 아주 간단한 확장 기능을 제공하며 내용에 따라 컨텍스트 메뉴에 새 항목을 표시하고 싶습니다. 매우 간단해야하며이를 수행해야하는 방법을 보여주는 자습서가 많이 있습니다. .Firefox 컨텍스트 메뉴 항목이 표시되지 않습니다.

문제는 내가 새로운 요소 인 contecontentAreaContextMenupopupshowing에 대한 수신기를 추가하자 마자 숨기지 않아도 표시되지 않는다는 것입니다. 난 그냥 라인을 코멘트 경우

var proton = { 
    init : function() { 
     try {  
      if (document.getElementById("contentAreaContextMenu")) { 
       document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", this.showContextMenu, false); 
      } 
     } catch (e) { 
      this.manageException(e); 
     }  
    }, 
    hello : function(){ 
     try { 
      alert("Hello, world2!"); 
     } catch (e) { 
      this.manageException(e); 
     } 
    }, 
    showContextMenu : function (event){ 
     try { 
      var show = document.getElementById("prot-on-main-item"); 
      show.setAttribute("hidden", false); 
     } catch (e) { 
      this.manageException(e); 
     } 
    }, 
    manageException : function (exception) { 
     window.openDialog(
      "chrome://Prot-On/content/resources/html/showErrorBacktrace.htm", 
      "errorbacktrace", 
      "centerscreen=yes,chrome=yes,modal=yes,resizable=yes", 
      exception, 
      "display error" 
     ); 
    } 
} 


try { 
    window.addEventListener("load", proton.init(), false); 
} catch (e) { 
    proton.manageException(e); 
} 

: 예상대로

if (document.getElementById("contentAreaContextMenu")) { 
     document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", this.showContextMenu, false); 
    } 

모든 작품을,

<?xml version="1.0"?> 

<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?> 
<?xml-stylesheet href="chrome://Prot-On/skin/Prot-On.css" type="text/css"?> 

<!DOCTYPE window SYSTEM "chrome://Prot-On/locale/Prot-On.dtd"> 

<overlay id="Prot-On" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 
<script type="application/x-javascript" src="chrome://Prot-On/content/prot-on.js"/> 

<popup id="contentAreaContextMenu"> 
    <menuitem id="prot-on-main-item" label="Hello, world!" oncommand="proton.hello();"/> 
</popup> 


</overlay> 

그리고 제자-on.js :

다음은 XUL 코드 그래서 나는 그 문제가 무엇인지 정말로 확신하지 못합니다.

manageException 함수는 궁금한 것을 대비하여 예외 및 추가 기능에 대한 추가 정보를 표시하기 만합니다.

답변

1

addEventListener에 대한 참조를 전달하는 대신 창로드에서 즉시 proton.init을 실행 중입니다.

변경이 라인 :

window.addEventListener("load", proton.init(), false); 

사람 :

window.addEventListener("load", function() { 
    proton.init(); 
}, false); 
+0

지금 당황, 그런 바보 같은 일을 생각합니다. 어쨌든 해결책 주셔서 감사합니다. – frisco

관련 문제