Cum se utilizează chrome.tabs.getCurrent pentru a obține obiectul pagină într-o extensie Chrome? (Programare, Javascript, Html, Extensie Google Chrome, Google Chrome Devtools)

Tom a intrebat.

Codul este menit să afișeze în consolă obiectul tab curent pentru pagina pe care o vizualizează utilizatorul, dar afișează doar undefined. Este rulat din interiorul unei pagini de acțiune a browserului.

chrome.tabs.getCurrent( function(tab){
    console.log(tab);
} );

M-am uitat la documentația și, din câte îmi dau seama, codul pare să corespundă cu ceea ce scrie.

Comentarii

  • Paginile popup de acțiune a browserului nu fac parte din nicio filă, așa că tabs.getCurrent() nu vor funcționa. În schimb, răspunsul lui Serg cu tabs.getSelected() ar trebui să funcționeze. –  > Por Chris McFarland.
4 răspunsuri
serg

Încercați:

chrome.tabs.getSelected(null, function(tab){
    console.log(tab);
});

Comentarii

  • Depreciat, consultați răspunsul lui @konstantin de mai jos. –  > Por lionello.
  • getCurrent() nu este nici pe departe la fel ca depreciatul getSelected() sau răspunsul de mai jos, prima metodă obține fila din care se execută scriptul, în timp ce a doua obține fila selectată(activă) curentă –  > Por novalain.
  • cum se obține innerHTML ? –  > Por daniel assayag.
Konstantin Smolyanin

Metoda getSelected() a fost depreciată începând cu Google Chrome 16 (dar multe articole din documentația oficială nu fuseseră încă actualizate). Mesajul oficial este aici. Pentru a obține fila care este selectată în fereastra specificată, utilizați chrome.tabs.query() cu argumentul {'active': true}. Deci, acum ar trebui să arate așa:

chrome.tabs.query({ currentWindow: true, active: true }, function (tabs) {
  console.log(tabs[0]);
});

Comentarii

  • Întotdeauna returnează o matrice de lungime 0 în callback( –  > Por SuperUberDuper.
  • ce se întâmplă dacă într-un desktop am 2 ferestre chrome deschise, fiecare îmi arată câte o filă, în acest caz este posibil să am >1 file active? –  > Por lsheng.
  • @lsheng : Da, deci utilizați currentWindow: true pentru a o restricționa (sau pentru a itera prin ele) –  > Por Brett Zamir.
  • Deci, de ce nu chrome.tabs.getCurrent funcționează în codul lui OP? Este și problema mea. –  > Por Shayan.
  • Încă relevant… 7 ani mai târziu, nu știu de ce nu-și actualizează documentația în acest sens –  > Por Eric Majerus.
Jk L.

Poate fi nedefinit dacă este apelat dintr-un context non-tab (de exemplu, o pagină de fundal sau o vizualizare popup).

Se pare că ar trebui să folosiți acest cod nu în bg.js ci mai degrabă în cs.js.

Comentarii

  • Bine ați venit la SO, vă apreciem contribuția. Vă rugăm să fiți amabil și să fiți un pic mai specific, nu sunt sigur pentru ce sunt citatele – vă rugăm să menționați pe cine citați De asemenea: Ce este acest cod. Vă rugăm să vă editați întrebarea. –  > Por B–rian.
  • este din documentele oficiale google pentru chrome.tabs. developer.chrome.com/extensions/tabs#method-getCurrent. Din păcate, am încercat în cs.js, tot nu a funcționat. este o eroare lol –  > Por Jk L..
  • Este mai degrabă ca și cum ai putea să o apelezi dintr-o pagină care are o filă de browser. ex: pagina de opțiuni. –  > Por Santosh.
Greg Wang

De la chrome.tabs este disponibil doar în scriptul de fundal sau popup și scriptul de fundal nu este activ în nicio filă, chrome.tabs.getCurrent() întoarce întotdeauna undefined.

În schimb, putem prelua activul Tab din al doilea argument al oricărui apel de revenire a ascultătorului de mesaje. De exemplu,

browser.runtime.onMessage.addListener((message, sender) => {
  console.log('Active Tab ID: ', sender.tab.id);
});