Javascript chrome.tabs.onUpdate是否返回不存在的选项卡id?
所以我会在标签更新时跟踪它们,并将每个标签存储在一个数组中。然而,有时候,也只是有时候,一个不存在的id会被传递出去,而我无法用我的一生来理解它。这是一个已知的chrome bug还是我只是遗漏了什么?非常感谢Javascript chrome.tabs.onUpdate是否返回不存在的选项卡id?,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,所以我会在标签更新时跟踪它们,并将每个标签存储在一个数组中。然而,有时候,也只是有时候,一个不存在的id会被传递出去,而我无法用我的一生来理解它。这是一个已知的chrome bug还是我只是遗漏了什么?非常感谢 chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,currentTab){ //Find the containing window in the array of windows var contai
chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,currentTab){
//Find the containing window in the array of windows
var containingWindow = windows.filter(function(currentWindow){
return currentWindow.id===currentTab.windowId;
});
if (containingWindow.length===1){
containingWindow = containingWindow[0];
//Find the containing tab (by id) in our list of tabs.
var containingTab = containingWindow.tabs.filter(function(currentTab){
return currentTab.id===tabId;
});
if (containingTab.length===1){
console.log("It worked!");
}
else{
//At this point, there's no reason for it NOT to work, but sometimes an id gets thrown that doesn't exist.
debugger;
throw "Argh the bug is still there matey! "+containingTab.length+" "+containingTab+" "+tabId;;
}
}
});
那么,您的代码将无法工作,因为您在创建时存储在数组中的窗口对象不是这些窗口的实时版本,而是快照。它们的选项卡列表不会更新 如果出于任何原因需要有关包含选项卡的窗口的更新信息,请调用chrome.windows.get:
你从哪里获得窗口?这是我创建的一个称为“窗口”的数组,窗口通过chrome.windows.onCreate添加到所述数组中,选项卡通过chrome.tabs.onCreate添加到对象中包含的“选项卡”数组中。我知道这一点。这就是为什么我要利用onUpdate事件来更新这些选项卡。但是,onUpdate返回以前不存在的选项卡。举个例子,比如说,我有tab 1860,它会告诉我tab 1862被更新了,而实际上它是tab 1860。它为该选项卡返回了错误的id。我正在解释您提供的代码中的错误。您提到的问题可能是因为您不收听onReplaced事件-Chrome有时会制作预渲染的选项卡,并替换现有的选项卡。我想预渲染的选项卡不会得到一次创建的事件。事实上可能就是这样。我来看看你的照片。非常感谢。问题是,为什么你们甚至需要用这种方式跟踪所有打开标签的列表?一个标签管理器。存储和调用它们比等待Chrome的功能要好得多,这可能需要一些时间:
chrome.windows.get(
currentTab.windowId,
{populate: true},
function(window) {
/* ... */
}
);