我正在开发一个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从未打印过。
发布于 2012-08-08 02:12:17
这就是我是如何做到的。(请注意,我从未使用过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")上面的代码将触发main.js中的worker.port.on代码。
https://stackoverflow.com/questions/11850154
复制相似问题