无法让 port.emit 和 port.on 在 Firefox 附加组件中工作

Can't get port.emit and port.on to work in a Firefox add-on

本文关键字:port 组件 Firefox 工作 on emit      更新时间:2023-09-26

我发送了这样的消息:

self.port.emit("nodes_grubed", textNodesValues);

并想对此做出反应:

worker.port.on("nodes_grubed", requestRenderedtext);

但它不起作用。我应该更改什么?你可以在这里尝试我的附加组件。

main.js

var widgets = require("widget");
var tabs = require("tabs");
var self = require("self");
function requestRenderedtext(textNodesText) {
  console.log('text nodes requesting');
} 
var widget = widgets.Widget({
  id: "mozilla-link",
  label: "Mozilla website",
  contentURL: "http://www.mozilla.org/favicon.ico",
  onClick: 
    function(worker) {
      tabs.activeTab.attach({
        contentScriptFile: self.data.url("process.js")
      });
      worker.on("nodes_grubed",requestRenderedtext);
      worker.port.on("nodes_grubed",requestRenderedtext);
    },
  onAttach:
    function(worker) {
      worker.on("nodes_grubed",requestRenderedtext);
      worker.port.on("nodes_grubed",requestRenderedtext);
    }
});
widget.on("nodes_grubed",requestRenderedtext);
widget.port.on("nodes_grubed",requestRenderedtext);

process.js

function getTextNodes() {
  var walker = document.createTreeWalker(
    document.body, 
    NodeFilter.SHOW_TEXT, 
    null, 
    false
  );
  var node;
  textNodes = [];
  var textNodesValues=[];
  while(node = walker.nextNode()) {
    if (node.parentNode.tagName!='SCRIPT') {
      textNodesValues.push(node.nodeValue);
      textNodes.push(node)   
    }
  }
  if (textNodesValues.length!=0) {
    console.log('emmiting nodes');
    self.port.emit("nodes_grubed", textNodesValues);
  }
}
getTextNodes();

单击小部件时,您不会将工作线程作为参数(单击发生时它不存在) - 您可以通过调用 tabs.activeTab.attach() 来创建它。你应该使用 tabs.activeTab.attach() 的返回值,如下所示:

  onClick: 
    function() {
      var worker = tabs.activeTab.attach({
        contentScriptFile: self.data.url("process.js")
      });
      worker.port.on("nodes_grubed", requestRenderedtext);
    },