1

私は Firefox 拡張機能に取り組んでおり、アドオン スクリプトとコンテンツ スクリプトの間で通信できるようにする必要があります。この作業には 1 つの方向性があります。スクリプトの URL をアドオン スクリプトからコンテンツ スクリプトに渡します。ただし、逆方向にも移動できる必要があります。私の main.js ファイルは次のようになります。

var data = require("self").data;
var pageMod = require("page-mod");
pageMod.PageMod({
  include: "https://trello.com/board/*",
  contentScriptWhen: 'end',
  contentScriptFile: data.url("scrumello_beta.user.js"),
  onAttach: function(worker) {
    worker.postMessage(data.url("scrumello_beta.js"));
    worker.on("message", function(addonMessage)
    {
        console.log(addonMessage);
    });
  }
});

クライアント スクリプトには、次のメソッドがあります。

    function OpenProcess(SCRNumber)
    {
        self.postMessage(SCRNumber); 
    }

ただし、このメソッドが呼び出されると、次のエラーが発生します。

Timestamp: 8/7/2012 12:15:58 PM
Error: NS_ERROR_XPC_NOT_ENOUGH_ARGS: Not enough arguments [nsIDOMWindow.postMessage]
Source File: resource://jid0-3mulsijczmtjeuwkd5npayasqf8-at-jetpack/scogan-3/data/scrumello_beta.js
Line: 1038

これにより、worker.on("message"... イベントがトリガーされなくなります。私の知る限り、postMessage は引数を 1 つしか取りません。

編集: postMessage 呼び出しを次のように変更しました

self.postMessage(SCRNumber, "*"); 

どちらも出力されているconsole.logでラップしたので、メッセージが実際に投稿されていると想定する必要があります。ただし、main.js のイベント ハンドラーはメッセージを取得しません。これは、そこにある console.log が出力されないためです。

4

1 に答える 1

1

これが私がやった方法です。(私が使用したことがないことに注意してくださいself.postmessage)

コンテンツ スクリプト通信へのアドオン スクリプト (main.js):

contentPage = pageMod.PageMod({
  onAttach: function(worker) {

    // Post a message directly to the content script
    worker.postMessage("any thing you want to respond");

    // Depending on the message, respond with different data
    worker.port.on('getFact', function() {
      worker.postMessage("any thing you want to respond");
    });
    worker.port.on('getEnabled', function() {
      worker.postMessage("any thing you want to respond");
    });
  }
});

--

アドオン スクリプトに応答するコンテンツ スクリプトは次のとおりです。

// Get data from the addon script
self.on('message', function(msg) {
  // Do something depending on the message passed
});

--

最後に、コンテンツ スクリプトは次のようにアドオン スクリプトと通信できます。

self.port.emit("message to send to add-on script")

上記のコードworker.port.onは、main.js のコードをトリガーします。

于 2012-08-07T18:12:16.593 に答える