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

How to get data from content script 1 to add-on script to content script 2?

本文关键字:脚本 获取 数据      更新时间:2023-09-26

恐怕我还没有弄清楚脚本之间通过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);
        });
    }
});

一般来说,您尝试的方法看起来是可行的,只是您可能想用panel.port.on替换panel.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);
});