有人可以解释在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);
我得到了
错误:未定义端口。
答案 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