如何相互使用port.on()和port.emit()

时间:2015-10-12 01:28:12

标签: firefox-addon firefox-addon-sdk

我正在尝试使用port.on()和port.emit()一起使用page-worker和pageMod,但来自define.js的信号对pageMod的port.on()没有任何影响。 ..这是使用port.on()和port.emit()的正确方法,还是以这种方式将两者链接在一起是不允许的?

index.js:

context.MapRoute(
  name: "SPARouting",
  url: "{*.}",
  defaults: new { controller = "Application", action = "Index" }
);

define.js:

pageMod.PageMod({
  include: "*",
  contentScriptWhen: "ready",
  contentScriptFile: [
    data.url("jquery.js"),
    data.url("jquery-ui.min.js"),
    data.url("define.js")
  ],
  onAttach: function(worker){
      worker.port.on("getWord", function(word) {
          console.log(word);
          worker.port.emit("newWord", word);
      });
      worker.port.on("updatedWord", function(URL){
          console.log(URL);
      });
    }
});

dictionaryRef.Page({
    contentScriptWhen: "ready",
    contentScriptFile: [
      data.url("jquery.js"),
      data.url("jquery-ui.min.js"),
      data.url("define.js"),
    ],
    contentURL: "http://www.dictionary.com/browse/",
    onAttach: function(worker){
        worker.port.on("newWord", function(word) {
            console.log(word);
            self.contentURL = "http://www.dictionary.com/browse/" + word;
            worker.port.emit("updatedWord", self.contentURL);
        });
    }
});

基本上,getSelected()将捕获突出显示的单词,然后“dblclick”绑定应该通过port.emit()发送一个信号,pageMod应该接收,然后传递给页面工作者以更改其URL,这将允许我访问DOM并刮取字典定义,以便它可以在弹出窗口中显示在主窗口中。目前,没有一个port.emit()语句可以工作。

0 个答案:

没有答案