我担心我还没有弄清楚通过port
的脚本之间的通信是如何工作的。
在panel.js
内,我会在面板中按下提交按钮。我将值保存在数组vals
中,并使用:
self.port.emit("submitted", vals);
用main.js
收听:
panel.port.on("submitted", function(vals) { ... });
现在我想将vals
发送到另一个内容脚本('page.js'),该脚本将使用这些数据来操纵网站的DOM。
在main.js上我尝试过:
require("page-mod").PageMod({
include: "*",
contentScriptWhen: 'end',
contentScriptFile: data.url("page.js"),
onAttach: function(worker) {
panel.on('submitted', function(vals) {
worker.port.emit('output', vals);
});
}
});
答案 0 :(得分:1)
一般情况下,您尝试的内容看起来会起作用 - 只是您可能希望将panel.on
替换为panel.port.on
。但是,工人可以来来去去,你不想尝试与不再存在的人交流。 documentation有一个很好的例子,可以跟踪活跃的工作人员,可以根据您的需要稍微调整一下:
var workers = [];
var pageMod = require("page-mod").PageMod({
include: '*',
contentScriptWhen: 'end',
contentScriptFile: data.url('page.js'),
onAttach: function(worker) {
// Add new worker to the list
workers.push(worker);
worker.on('detach', function () {
// Remove no longer active worker from the list
var index = workers.indexOf(worker);
if (index >= 0)
workers.splice(index, 1);
});
}
});
panel.port.on('submitted', function(vals) {
for (var i = 0; i < workers.length; i++)
workers[i].port.emit('output', vals);
});