如何通过pageMod跟踪工人的标签? (或者worker.tab丢了!)

时间:2016-03-23 22:40:55

标签: javascript firefox-addon firefox-addon-sdk

使用pageMod,我为每个页面添加了一个工作者。通常,我可以使用activeTab找到与workers[i].tab == activeTab匹配的工作人员。

但是,我注意到如果我将标签拉出到新窗口,worker.tab变得不确定,那就不好了。

pageMod.PageMod({
  include: "*",
  contentScriptWhen: "ready",
  contentScriptFile: ["./trace.js", "./utils.js","./pageWorker.js"],
//  attachTo: ["existing", "top"],
  onAttach: function(pageWorker) {
    attachPageWorker(pageWorker);
    pageWorker.on('detach', function() {
      detachPageWorker(pageWorker);
    });
  }
});

例如,当我打开两个页面时,标签ID为-5-1-5-2,并且工作人员具有匹配的标记-5-1-5-2

如果我将标签拉出到新窗口,则标签变为-5-1-35-1,并且工作人员标签为-5-1undefined

如果我将拉出的标签推回到第一个窗口,则标签为-5-1-5-3,工作人员仍为-5-1undefined

function getPageWorkers(tab) {
  var result = [];
    for (let tab of tabs) {
        console.log(tab.id);
    }
  for (var i = pageWorkers.length - 1; i >= 0; i--) {
        console.log(pageWorkers[i].tab.id)
    if (pageWorkers[i].tab === tab) {
      result.push(pageWorkers[i]);
    }
  }
  return result;
}

也许我需要附加一个额外的事件:

pageWorker.on('moveToAnotherWindow',...)

更新。当拖出完成后(这是在Windows中),会触发两个事件,pagehidepageshow。此时worker.tab.idundefined

console.log: attaching pageWorker in -5-1
console.log: showing page in -5-1
console.log: attaching pageWorker in -5-2
console.log: showing page in -5-2
<drag happens here>
console.log: hiding page in undefined
console.log: showing page in undefined

更新2。当您将标签移动到新窗口时,worker.tab = false

console.log: attaching pageWorker in tab.id -5-1
console.log: showing page in tab.id -5-1
console.log: pageWorker.tab: constructor {}
console.log: attaching pageWorker in tab.id -5-2
console.log: showing page in tab.id -5-2
console.log: pageWorker.tab: constructor {}
<drag happens here>
console.log: hiding page in tab.id undefined
console.log: pageWorker.tab: false
console.log: showing page in tab.id undefined
console.log: pageWorker.tab: false

console.log: activeTab: -45-1
console.log: tabs:
console.log:     -5-1
console.log:     -45-1
console.log: workers
console.log:     undefined
console.log:     -5-1
console.log:  Error: no pageWorkers match activeTab

更新3。当你在新窗口中终止新选项卡时,会调用detach两次。

更新4。即使使用.tab = false,如果我在工作人员上使用port.emit,它也会响应。

更新5。最小,完整且可验证的示例。使用jpm run启动Firefox并在两个标签中转到Google。然后拖出其中一个标签。

https://github.com/tofutim/pagepulla

0 个答案:

没有答案