Событие Firefox Addon Attach для PageMod не генерирует события

Я не могу установить связь между моим дополнением и моим скриптом прикрепления. Событие присоединения для PageMod работает, однако оно не передает мое событие getElements моему списку-геттеру. Как правильно использовать метод port.emit? Спасибо!

index.js (аддон)

var pageMod = require('sdk/page-mod');
var data = require("sdk/self").data;

pageMod.PageMod({
  include: "*.workflowy.com",
  contentScriptFile: [data.url("jquery-1.11.3.min.js"), data.url("list-getter.js")], 
  onAttach: function(worker) {

    // For some reasong the worker doesn't emit?
    worker.port.emit("getElements");

    worker.port.on("gotElements", function(times) {
      function printValues(el) {
        console.log(el);
      }
      times.forEach(printValues);
    });
  }
});

list-getter.js (contentScriptFile)

self.port.on("getElements", function() {
  var timeRegex = /\bam|pm/g
  var openLists = $('.project.open').find('.content');
  var times = []
  for (var i = 0; i < openLists.length; i++) {
    if (openLists[i].innerHTML.match(timeRegex)) {
      times.push(openLists[i].innerHTML)
    }
  }
  self.port.emit("gotElements", times);
});

person Tommy Rodriguez    schedule 08.09.2015    source источник
comment
С общением все в порядке. Измените openLists, скажем, на $('div').find('div'), и вы увидите. У вас должна быть какая-то другая проблема, связанная с вашим регулярным выражением или, что более вероятно, с использованием неправильных селекторов.   -  person Sagi    schedule 09.09.2015


Ответы (1)


Я совершил невероятную ошибку. Обязательно поместите все, что вы хотите загрузить объектом данных, в папку данных. У меня было две копии, и я менял не ту. Спасибо.

index.js

var pageMod = require('sdk/page-mod');
var data = require("sdk/self").data;

pageMod.PageMod({
  include: "*.workflowy.com",
  contentScriptFile: data.url("list-getter.js"), 
  onAttach: function(worker) {

    worker.port.emit("getElements");

    worker.port.on("gotElement", function(times) {

      function printValues(el) {
        console.log(el);
      }
      times.forEach(printValues);
    });
  }
});

список-getter.js

self.port.on("getElements", function(openProject) {
  var times = []
  var timeRegex = /\b([1-9]pm|[1-9]am|1[0-2]am|1[0-2]pm)/g;
  var openLists = document.querySelectorAll('.content');
  for (var i = 0; i < openLists.length; i++) {
    if (openLists[i].innerHTML != "") {
      if (openLists[i].innerHTML.match(timeRegex)) {
        times.push(openLists[i].innerHTML);
      }
    }
  }
  self.port.emit("gotElement", times);
)};
person Tommy Rodriguez    schedule 09.09.2015