2015-02-17 6 views
0

Итак, я отслеживаю вкладки по мере их обновления и хранения каждой вкладки в массиве. Однако иногда, и только иногда, id пропускается, который не существует, и я не могу понять это для жизни меня. Это известный хром-баг, или я просто что-то пропустил? Спасибо!chrome.tabs.onUpdated возвращает идентификатор табуляции, который не существует?

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

}); 
+1

Где вы получаете 'windows' от? – Xan

+0

Это массив, который я создал под названием «окна», и окна добавляются в указанный массив через chrome.windows.onCreate, а вкладки добавляются в массив «tabs», содержащийся внутри объекта, через chrome.tabs.onCreate. – ollien

ответ

0

Ну, ваш код не будет работать, так как Window объекты, которые вы храните в вашем массиве на создание не живут версии этих окон, но снимки. Их списки вкладок не обновляются.

Если вам нужна обновленная информация об окне, содержащем вкладку (по whateve причине), вы должны позвонить chrome.windows.get:

chrome.windows.get(
    currentTab.windowId, 
    {populate: true}, 
    function(window) { 
    /* ... */ 
    } 
); 
+0

Я это знаю. Вот почему я использую событие onUpdate для обновления этих вкладок. Однако onUpdate возвращает вкладки, которые еще не существовали. Например, например, у меня будет вкладка 1860, и она сообщит мне, что вкладка 1862 была обновлена, когда на самом деле это была вкладка 1860. Она вернула неверный идентификатор для этой вкладки. – ollien

+0

Я объясняю ошибку в представленном вами коде. Вы упомянули проблему, связанную с тем, что вы не слушаете событие onReplaced. Chrome иногда делает предварительные вкладки ans свопами существующих вкладок для них. Я предполагаю, что предварительные вкладки не получают события 'onCreated'. – Xan

+0

Huh. На самом деле это возможно. Я посмотрю на «Постоянные». Спасибо. – ollien

Смежные вопросы