2011-12-07 21 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> 

そしてPROT-on.js:

はここでXULコードですだから私は本当に何が問題なのか分からない。

manageException関数は、あなたが不思議に思っている場合に備えて、例外とそれが正常に動作するという追加情報を表示するだけです。

答えて

1

addEventListenerに参照を渡すのではなく、すぐにウィンドウの読み込みでproton.initを実行しています。

変更この行:

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

へ:

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

私は今embarrased、そのような愚かなことを感じます。とにかく解決に感謝します。 – frisco

関連する問題