2011-11-22 13 views
5

browser.xulを上書きするファイルoverlay.xulを上書きするファイルがあります。クロム拡張で実装されているのと同様の方法でメッセージの受け渡しを実装したいと思います。 chrome.manifest-Firefox拡張機能でメッセージパッシングを実装する方法は?

content helloworld content/ 
overlay chrome://browser/content/browser.xul chrome://helloworld/content/overlay.xul 
overlay chrome://navigator/content/navigator.xul chrome://helloworld/content/overlay.xul 


skin helloworld classic/1.0 skin/ 
style chrome://global/content/customizeToolbar.xul chrome://helloworld/content/overlay.css 

は、どのように私は私の場合にはoverlay.jsあるcontent_script.js登録するには?

Overlay.xul -

document.documentElement.addEventListener('click', function(e) { 

    messageManager.sendAsyncMessage('MyMessenger.MyMessage', {}); 

}, true); 

を、正しい構文は次のとおりです。何background.jsは -

addMessageListener("MyMessenger.MyMessage", function(obj) { 

    Firebug.Console.log(obj.name); 
}, true); 
  • - 私のoverlay.js私が使用している内部の今

    <script type="application/x-javascript" src="chrome://helloworld/content/jquery.js" /> 
    <script type="application/x-javascript" src="chrome://helloworld/content/overlay.js" /> 
    <script type="application/x-javascript" src="chrome://helloworld/content/background.js" /> 
    

    メッセージを渡すために?

  • コンテンツスクリプトとブラウザスクリプトの間の接続を設定するにはどうすればよいですか?

答えて

0

あなたが興味を持っているすべてが本当にコンテンツスクリプトを注入し、それと通信している場合、Add-on SDK、特にpage-mod packageを使用する方が簡単でなければなりません。これは、コンテンツスクリプトを簡単に挿入することができ、通信方法を提供します(前述のドキュメントの「コンテンツスクリプトとの通信」を参照)。

messageManagerについては、マルチプロセス環境用ですが、現在のシングルプロセスFirefoxでも同様に動作します。上記のコードの主な問題は、addMessageListenerはグローバル関数ではないため、messageManager.addMessageListener()に電話する必要があります。しかし、messageManagerを使って同じネームスペースにロードされ、お互いを直接呼び出すことができるスクリプト間でメッセージを渡すことは、とにかく過剰です。

gBrowser.selectedBrowser.messageManager.sendAsyncMessage('MyMessenger.MyMessage', {}); 

そして、これは動作するはずですので、コンテンツスクリプトが実際にグローバル関数としてaddMessageListenerを持っているでしょう:オーバーレイでスクリプトを行うだろう現在のタブでコンテンツスクリプトとの通信に

addMessageListener("MyMessenger.MyMessage", function(obj) { 
    console.log(obj.name); 
}); 
関連する問題