如何从内容脚本1获取数据到附加脚本到内容脚本2?

时间:2012-07-16 18:48:56

标签: javascript firefox-addon firefox-addon-sdk

我担心我还没有弄清楚通过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);
        });
    }
});

1 个答案:

答案 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);
});