在firefox扩展中使用port.emit和port.on

时间:2014-01-03 23:07:58

标签: firefox-addon-sdk

有人可以解释在firefox扩展中使用port.on和port.emit的上下文吗?

official documentation我想象这应该有效:

//main.js
var someData = "Message received"; 

self.port.emit("myMessage", someData);
self.port.on("myMessage", alert(someData));

但我得到

  

错误:未定义self。

将此附加到如下定义的对象后:

var self = require("sdk/self"); 
self.port.emit("myMessage", someData);

我得到了

  

错误:未定义端口。

1 个答案:

答案 0 :(得分:5)

如果使用page-mod模块将内容脚本注入网页,则可以在内容脚本中使用self.port与main.js进行通信。例如:

main.js:

var data = require('sdk/self').data;

require('sdk/page-mod').PageMod({
  include: ["*"],
  contentScriptFile: [data.url('cs.js')],
  attachTo: ["existing", "top"],
  onAttach: function(worker) {
    worker.port.emit('attached', true);
  }
});

cs.js:

self.port.on('attached', function() {
  console.log('attached...');
});

有关相关文档,请从此处开始:

https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts