2010-01-27 8 views
39

Używam słuchacza na stronie tła wiedzieć, kiedy karta jest załadowany:Rozszerzenia Chrome: Jak wiadomo, kiedy zakładka zakończeniu ładowania, od strony tła

chrome.tabs.onUpdated.addListener(function (tabId) { }) 

Ale słuchacz jest zwolniony dwa razy: kiedy strona zaczęła się ładować i kiedy strona się zakończyła. Czy istnieje sposób na rozróżnienie tych dwóch przypadków?

+0

Aby wiedzieć, kiedy zaczyna się zakładka ** ** załadunku, patrz https: // stackoverflow.com/questions/19191679/chrome-extension-inject-js-before-page-load/19192010#19192010 – Pacerier

Odpowiedz

61

Na szczęście znalazłem rozwiązanie.

Jest additional parameter, przechowująca wartość stanu:

chrome.tabs.onUpdated.addListener(function (tabId , info) { 
    if (info.status === 'complete') { 
    // your code ... 
    } 
}); 

status może być loading lub complete.

+1

Is not); zaginął na końcu? – Lawand

+1

PS Uwaga jest to dobre dla skryptów w tle. W przypadku skryptów treści wystarczy użyć 'window.onready' –

+1

@PeterEhrlich Problem z Window.onready jest taki, że uruchamia się, gdy tylko załaduje się init DOM. Jeśli spróbujesz witryn takich jak Gmail, który stale pobiera dane, natychmiast się uruchamia. – Volatil3

5

Chciałem łatwiejszy sposób to zrobić po otwarciu zakładki

function createTab (url) { 
    return new Promise(resolve => { 
     chrome.tabs.create({url}, async tab => { 
      chrome.tabs.onUpdated.addListener(function listener (tabId, info) { 
       if (info.status === 'complete' && tabId === tab.id) { 
        chrome.tabs.onUpdated.removeListener(listener); 
        resolve(tab); 
       } 
      }); 
     }); 
    }); 
} 

więc byłoby

let tab = await createTab('http://google.com');