如果Firefox插件中有一个代码段,如下所示:
var pagemod = PageMod({
include: ['*'],
contentScriptFile: [data.url('content.js')]
});
panel = require("sdk/panel").Panel({
width: 322,
height: 427,
contentURL: data.url("main.html"),
include:["http://*/*","https://*/*"],
contentScriptFile: [data.url('panel.js')]
});
我在Chrome扩展程序中找到了一些示例代码。他们使用window.parent.postMessage(message, "*")
发送消息并使用window.addEventListener("message",function (e) {//do something}
来接收消息。
如何直接在Firefox插件中将“panel.js
”的消息发送到“content.js
”?
答案 0 :(得分:1)
解决方案的概念与this answer非常相似:
以下代码用于维护端口列表:
var ports = [];
var pagemod = PageMod({
include: ['*'],
contentScriptFile: [data.url('content.js')],
onAttach: function(worker) {
ports.push(worker.port);
worker.on('detach', function() {
var index = ports.indexOf(worker.port);
if (index !== -1) ports.splice(index, 1);
});
}
});
现在,只要您想从panel.js
发送消息,只需使用:
// panel.js
self.port.emit('message-to-tabs', 'example of message');
创建面板后,必须在主脚本中处理消息:
panel = require('sdk/panel').Panel({
width: 322,
height: 427,
contentURL: data.url('main.html'),
include: ['http://*/*', 'https://*/*'],
contentScriptFile: [data.url('panel.js')]
});
panel.port.on('message-to-tabs', function(message) {
for (var i=0; i<ports.length; i++) {
ports[i].emit('message-to-tab', message);
}
});
在标签的内容脚本(content.js)中,您可以收听此事件并按如下方式处理:
self.port.on('message-to-tab', function(message) {
// Do something with message
});