Javascript 内容脚本(页面修改)和弹出窗口(面板)之间的通信

Javascript 内容脚本(页面修改)和弹出窗口(面板)之间的通信,javascript,firefox,firefox-addon-sdk,Javascript,Firefox,Firefox Addon Sdk,我目前正在使用Firefox插件sdk进行Firefox扩展,我尝试在内容脚本(页面修改)和弹出窗口(面板)之间进行通信,但没有成功 我用的是Erik Vold。这是我的密码: var tbb = require('toolbarbutton').ToolbarButton({ id: 'from-us_button', label: 'from-us', image: data.url('img/on.png'), panel: panel }); var

我目前正在使用Firefox插件sdk进行Firefox扩展,我尝试在内容脚本(页面修改)和弹出窗口(面板)之间进行通信,但没有成功

我用的是Erik Vold。这是我的密码:

var tbb = require('toolbarbutton').ToolbarButton({
    id: 'from-us_button',
    label: 'from-us',
    image: data.url('img/on.png'),
    panel: panel

});

var pageMod = require('page-mod').PageMod({
  include: "*",
  contentScriptFile: [
    data.url('recuperation.js')
    ],
  contentScriptWhen : "end",
  attachTo: ["existing", "top"]

});


var panel = require('panel').Panel({
    width: 200,
    height: 500,
    contentURL: data.url('popup.html')

});
My popup.html包含:

<script type="text/javascript" src="popup.js"></script>


我想将一个变量从recoverage.js传递到popup.js,我该怎么做?

在popup.js中,您应该有一个“addon”全局对象,它允许您将消息发送回main.js。这里记录了这一点:

您需要将popup.js附加到面板:

var panel = require('panel').Panel({
    ...
    contentURL: data.url('popup.html'),
    contentScriptFile:  require("self").data.url("popup.js")  //or data.url() if you already have it set
});
通过
标记加载的脚本缺少使用
self.port
所需的特权

然后在页面mod
worker
中添加一个侦听器,并将消息转发到面板,如下所示:

var panel = ...
...
require('page-mod').PageMod({
  include: "*",
  contentScriptFile: [
    data.url('recuperation.js')
  ],
  contentScriptWhen : "end",
  attachTo: ["existing", "top"],
  onAttach: function(worker){
    worker.port.on("recuperation-to-panel",function(msg){
        panel.port.emit("recuperation-to-panel",msg);
    });    
  }
});
然后从recoverage.js:


*编辑:它应该是上的worker.port.on;不
pageMod.port.on
。抱歉。

谢谢您的回复,但我有一个错误:“pageMod.port未定义”。@seb68:oops,它应该是
worker.port.on
;不
pageMod.port.on
。修好了,谢谢。我仍然有一个错误:“msg未定义”。在recoverage.js中,我有
var msg=“hello”
@seb68:
msg
接通
worker.port.on
是否正常?当您将
console.error(msg)
放入将消息传递到panel.js的事件处理程序中时,它会输出什么?如果我将
contentScriptFile:[data.url('recoverage.js')、data.url('popup.js')]
放入工具栏按钮中,它会工作。谢谢。谢谢,如果我能投你10票,我会那样做的。我认为这些信息应该在文档中得到更多的强调,这很重要,但很容易被忽略。
self.port.emit("recuperation-to-panel",msg);