内容脚本(页面mod)和弹出(面板)之间的通信



我目前正在使用Firefox添加sdk的Firefox扩展,我试图在内容脚本(页面mod)和弹出(面板)之间进行通信,但无济于事。

我正在使用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')
});

我的pop .html包含:

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

我想通过一个变量从休养。js弹出窗口。js,我怎么能做到这一点?

在你的pop - up.js你应该有一个'add '全局对象,它允许你发送消息回main.js。在这里记录:

https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/panel.html样式% 20信任% 20面板% 20内容

您需要将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
});

通过<script>标签加载的脚本缺少使用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);
    });    
  }
});

Then from recover .js:

self.port.emit("recuperation-to-panel",msg);

* edit:应该是worker.port.on;不是pageMod.port.on。对不起。

最新更新