1

恐怕我还没有弄清楚脚本之间的通信是如何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);
        });
    }
});
4

1 回答 1

1

一般来说,你正在尝试的东西看起来会起作用——只是你可能想panel.onpanel.port.on. 但是,工人可以来来去去,你不想尝试与那些不再在那里的人交流。该文档有一个很好的示例,允许跟踪活跃的工作人员,可以根据您的目的对其进行微调:

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);
});
于 2012-07-17T08:31:57.987 回答