我正在开发 Firefox 扩展,我需要能够在插件脚本和内容脚本之间进行通信。我有一个工作方向:将脚本的 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 只接受一个参数,所以这里的任何帮助将不胜感激。
编辑:我已将 postMessage 调用更改为
self.postMessage(SCRNumber, "*");
我将它包装在 console.log 中,两者都在打印,所以我必须假设消息实际上是在发布的。但是,main.js 中的事件处理程序从不接收消息,因为我在其中的 console.log 从未打印过。