2012-03-05 9 views
5

FirefoxのアドオンSDKを使用して、FirefoxにChrome拡張機能を移植する作業を進めています。Panel&PageModコンテンツFirefoxの拡張機能で渡されるスクリプトメッセージ

拡張子は、toolbar button(Chromeのpopup.html +ブラウザアクションに相当)とPageModコンテンツスクリプトに繋がれたパネルで構成されています。

パネルが開いたら、それはそのページからいくつかの情報を含むオブジェクトを受け取るために、現在のタブのコンテンツのスクリプトにメッセージを送信する必要があります。私が問題を抱えている部分は、実際にメッセージを受け渡す方法です。誰かが正しい方向に私を向けるのを助けることができますか? Chrome拡張開発者がFirefoxのアドオン開発を学ぶのに役立つ多くのリソースを見つけることができないようです。

次の質問は、Chrome環境でこの概念を実証しています。私はちょうどFirefoxにそれを移植するのを助ける必要があります。
Chrome Extension - Message Passing from Popup to Content Script

答えて

9

アドオンSDKでは、作成したワーカーと通信しないため、アドオンSDKではやや複雑です。そして、システムは労働者を追跡しません、あなたはそれを自分で行う必要があります。このような何か(未テストコード)を動作するはずです:

var workers = []; 
var pageMod = require("page-mod"); 
pageMod.PageMod({ 
    include: ..., 
    contentScriptFile: ..., 
    onAttach: function(worker) 
    { 
    workers.push(worker); 
    worker.on("detach", function() 
    { 
     var index = workers.indexOf(worker); 
     if (index >= 0) 
     workers.splice(index, 1); 
    }); 
    } 
}); 

これはworkers変数は、アクティブな労働者(Worker object documentation)のリストが含まれていることを確認します。あなたはこれを行う特定のタブに割り当てられている労働者にメッセージを送信する必要があるときに:もちろん

var tabs = require('tabs'); 
for (var i = 0; i < workers.length; i++) 
    if (workers[i].tab == tabs.activeTab) 
    worker.postMessage(...); 

をあなただけの拡張子自体からではなく、パネルか何かにロードされたコンテンツスクリプトからこれを行うことができますそうですね。コンテンツスクリプトを使用している場合は、最初に内線番号にメッセージを送信する必要があります。その場合、メッセージをそのタブのワーカーに転送する必要があります。アクティブなタブで労働者のタブを比較し、このバグレポートhttps://bugzilla.mozilla.org/show_bug.cgi 1として

+0

はまだその歴史の中でいくつかの古い労働者を保持することができるタブとして正しい労働者を見つけることは十分ではありません。 – baseten

+0

解決策はここにあります:http://stackoverflow.com/questions/15502043/addon-sdk-context-menu-and-page-mod-workers – baseten

関連する問題