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

asm*_*cdo 4 firefox-addon-sdk

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

官方文档我想象这应该工作:

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

self.port.emit("myMessage", someData);
self.port.on("myMessage", alert(someData));
Run Code Online (Sandbox Code Playgroud)

但我明白了

错误:未定义self.

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

var self = require("sdk/self"); 
self.port.emit("myMessage", someData);
Run Code Online (Sandbox Code Playgroud)

我明白了

错误:未定义端口.

can*_*ani 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);
  }
});
Run Code Online (Sandbox Code Playgroud)

cs.js:

self.port.on('attached', function() {
  console.log('attached...');
});
Run Code Online (Sandbox Code Playgroud)

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

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