1

残念ながら、スクリプト間の通信がどのように機能するかはわかりませんport。その中panel.jsで、パネルで送信ボタンが押されるのをリッスンします。値を配列に保存し、次のvalsように渡します。

self.port.emit("submitted", vals);

聞くmain.js:

panel.port.on("submitted", function(vals) { ... });

valsそして今、サイトの DOM を操作するためにデータを使用する別のコンテンツ スクリプト ('page.js')に送信したいと考えています。

私が試した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.onですpanel.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 に答える