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”的选项卡。