Javascript 我如何跟踪员工';通过pageMod制表符?(或worker.tab丢失!)

Javascript 我如何跟踪员工';通过pageMod制表符?(或worker.tab丢失!),javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,使用pageMod,我向每个页面添加了一个工作程序。通常,我可以使用workers[I]找到与activeTab匹配的worker。tab==activeTab 但是,我注意到,如果我将一个选项卡拉到一个新窗口,则worker.tab将变得未定义,这是不好的 pageMod.PageMod({ include: "*", contentScriptWhen: "ready", contentScriptFile: ["./trace.js", "./utils.js","./page

使用
pageMod
,我向每个页面添加了一个工作程序。通常,我可以使用
workers[I]找到与
activeTab
匹配的worker。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-1
未定义

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;
}
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
如果我将拉出的卡舌推回第一个窗口,卡舌是
-5-1
-5-3
,工人保持在
-5-1
未定义的位置

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;
}
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
也许我还需要附加一个事件,比如:

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

更新。拖出完成后(在Windows中),将触发两个事件,
pagehide
pageshow
。此时,
worker.tab.id
未定义

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;
}
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

更新3。在新窗口中关闭新选项卡时,将调用两次“分离”


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


更新5.最小、完整且可验证的示例。使用
jpm run
启动Firefox并在两个选项卡中转到Google。然后拉出其中一个选项卡


请提供一份详细的报告。我们通常尝试提供经过测试且有效的答案。如果我们要尝试验证我们的解决方案是否适合您,那么如果我们从您的代码开始,而不必全部编写代码,那么这样做会容易得多。要做到这一点,我们每个人都必须首先复制您遇到的问题,然后找到解决方案。没有a形式的源代码可以帮助您完成更多的工作。没有这样的代码,就没有动力为你找到答案。请提供至少足够的信息,以便我们复制您的console.log输出。@Makyen使用jpm run启动Firefox并在两个选项卡中转到Google。然后拉出其中一个选项卡。显然,这是Firefox插件SDK中的一个bug。你似乎有。从你的问题来看,我想你是在找工作。是否正确:在修复bug之前,您需要一个可以在Firefox版本中使用的解决方案?一个应该是可能的。我现在还没有找到解决办法,所以在此期间,我会在处理过程中包括所有具有未定义选项卡的工作人员。我想这还不算太糟。我不知道你所说的“包括在我的处理中”对于所有标签未定义的工作人员是什么意思。什么处理?如果您需要的信息是
typeof worker.tab.id==“undefined”
,则应该可以确定任何具有
typeof worker.tab.id==“undefined”的选项卡。