私は 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 が出力されないためです。