Wie erhalte ich die ID eines Chrome-Tabs?

8

chrome.tabs.get funktioniert anscheinend nicht im Inhaltsskript, und außer dem Senden durch chrome.extension.sendRequest habe ich keine Ahnung, wie der Hintergrund auf die richtige Registerkarte reagieren soll.

Wie kann ich veranlassen, dass das Inhaltsskript Informationen an die Hintergrundseite sendet, und die Hintergrundseite die Informationen dann an die Registerkarte zurückgibt, von der sie gekommen ist?

    
Anonymous 27.03.2011, 09:07
quelle

4 Antworten

8
  

BEARBEITEN : Diese Antwort ist veraltet und verwendet veraltete Funktionen. Bitte verwenden Sie stattdessen andere Antworten.

Nun, lassen Sie mich Ihnen erklären, Alter;)

Senden Sie zuerst eine Nachricht von Ihrem Content-Skript wie folgt:

Inhaltsskript - Senden der Nachricht

%Vor%

Hintergrundseite - Empfangen Sie die Nachricht und die Antwort

%Vor%

ContentScript - Fügen Sie einen Listener hinzu

%Vor%     
Sindar 27.03.2011, 13:03
quelle
4

onMessage stellt eine Funktion sendResponse zur Verfügung, mit der eine Antwort direkt an den Absender gesendet werden kann.

background.js Auszug:

%Vor%

content_scripts.js Auszug:

%Vor%     
Nate 20.02.2013 21:56
quelle
3

Als Dankeschön an alle, die diese Frage nach 2011 sehen, habe ich eine Antwort gegeben, die die neueren Konventionen und APIs verwendet. Dies ist eine ziemlich populäre Frage und die akzeptierte Antwort ist an diesem Punkt etwas altmodisch (aber immer noch eine genaue Antwort), daher sollte dies für Neuankömmlinge hoffentlich eine klarere und treffendere Antwort auf die Frage geben.

Zunächst können Sie mit chrome.runtime.sendMessage eine Nachricht aus dem Inhaltsskript senden. Dies wird wahllos die Nachricht senden, wenn ein Laufzeit-Ereignis auftritt (d. H. Die Browser-Aktion wird angeklickt). Es sieht ungefähr so ​​aus:

content.js

%Vor%

Da Sie mit einer Ereignisseite kommunizieren müssen (in Übereinstimmung mit neueren Konventionen ist die Ereignisseite die bevorzugte Wahl über die persistente Hintergrundseite), um Informationen über die aktive Registerkarte zu erhalten (vorausgesetzt, Sie möchten nur die Registerkarten-ID) Sie können diese Informationen abrufen, indem Sie einen Laufzeit-Ereignis-Listener hinzufügen und den Parameter sender überprüfen. Es sieht ungefähr so ​​aus:

event.js

%Vor%

Da wir diese Informationen jedoch an das Inhaltsskript zurückgeben müssen, müssen wir zurückgehen und einen Callback-Handler zu chrome.runtime.sendMessage . Es sieht jetzt ungefähr so ​​aus:

content.js

%Vor%

Mit diesem Setup können Sie nun einfache, einmalige Nachrichten von content.js an event.js übergeben, wobei event.js Informationen an content.js zurückgibt.

Auch dies ist nur eine aktualisierte Version der akzeptierten Antwort für diejenigen, die ein Beispiel dafür haben möchten, wie der neue Ansatz funktioniert.

    
nburr 06.10.2015 20:14
quelle
1

& amp; Lt; Tab-ID abrufen & amp; Gt; vollständiges Beispiel

(Wahrheit: klarste vollständige Definitionen: Beispiele haben.)

& amp; Lt; manifest .json & amp; Gt;:

%Vor%

& amp; Lt; bg .js & amp; Gt;:

%Vor%

& amp; Lt; content .js & amp; Gt;:

%Vor%

Erweiterung neu laden, Tab gehen, Seite aktualisieren, warten, prüfen & amp; Lt; content .js & amp; Gt; oks, warte, check cb oks, warte, check & amp; Lt; console.log & amp; Gt; oks, zB:

Überprüfen Sie

Vollständiger Patch -:

& amp; Lt; bg .js & amp; Gt;:

%Vor%

& amp; Lt; content .js & amp; Gt;:

%Vor%     
Pacerier 11.02.2017 20:59
quelle

Tags und Links