1

次のようなメッセージを送信しています。

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();
4

1 に答える 1

2

ウィジェットがクリックされたときにワーカーをパラメーターとして取得することはありません (クリックが発生したときは存在しません) - を呼び出して作成します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);
    },
于 2012-05-09T07:44:33.123 に答える