Wie erhalte ich die URL des aktuell geöffneten Tabs in meinem Seitenaktions-Popup?

Lesezeit: 3 Minuten

Ich möchte eine Erweiterung für die automatische Anmeldung bei meinen Servern erstellen. Also habe ich eine Hintergrundseite erstellt, um die aktuelle URL zu überprüfen, und wenn sie meiner URL-Regex entspricht, zeige ich das Seitenaktionssymbol an. Beim Klick auf die Seitenaktion öffne ich ein Popup mit einigen Feldern. Ich muss die aktuell geöffnete URL abrufen und in eines der Felder im Popup eingeben (wenn wir beispielsweise auf die Standardaktion für die Lesezeichenseite klicken, wird die URL automatisch in das sich öffnende Popup eingetragen). Wie kann ich so etwas in Chrome-Erweiterungen machen? Ich habe versucht, Message Passing von der Hintergrundseite zum Popup-HTML zu übertragen, aber es funktioniert nicht. Kann man solche Nachrichten versenden? Ich habe auch versucht, Onload für die Popup-HTML-Datei einzustellen, aber ich habe festgestellt, dass es nicht ausgelöst wird. Bitte schlagen Sie eine geeignete Methode vor, um mit diesem Szenario umzugehen.

Wie erhalte ich die URL des aktuell geoffneten Tabs in
Rob W

Verwenden chrome.tabs.query mit folgenden Parametern:

  • queryInfo-Objekt:
    • active: true – Um die aktive Registerkarte zu erhalten
    • lastFocusedWindow: true – Zur Auswahl des aktiven Fensters
  • Callback-Funktion:
    Diese Funktion erhält ein Argument: Ein Array übereinstimmender Tabulatoren. Da nur ein Fenster aktiv sein kann und eine Registerkarte innerhalb dieses Fensters, hat das Array nur ein Element. Dieses Element ist ein Objekt mit der Tab Unterschrift.

Code-Auszug:

// Do NOT forget that the method is ASYNCHRONOUS
chrome.tabs.query({
    active: true,               // Select active tabs
    lastFocusedWindow: true     // In the current window
}, function(array_of_Tabs) {
    // Since there can only be one active tab in one active window, 
    //  the array has only one element
    var tab = array_of_Tabs[0];
    // Example:
    var url = tab.url;
    // ... do something with url variable
});

Die activeTab Erlaubnis ist ausreichend, damit dies funktioniert.

  • Danke für die Antwort Rob. Aber jetzt ist das Problem, wie ich das im Seitenaktions-Popup zum Laufen bringe. Ich habe diesen Code in einem Skript-Tag im Head-Bereich der Popup-HTML-Datei ausprobiert, aber er wird nicht ausgeführt, wenn ich das Popup öffne. Wie auch immer, ich kann das zum Laufen bringen, wenn das Popup geöffnet wird?

    – Johannes Josef

    3. Mai 2012 um 4:50 Uhr

  • @JophinJoseph Stellen Sie sicher, dass alle Bedingungen erfüllt sind: 1. Die tab Erlaubnis sollte in der Manifestdatei festgelegt werden. 2. Stellen Sie bei der Verwendung von Inline-Code sicher, dass "manifest_version": 2 existiert nicht in der Manifestdatei. Überprüfen Sie das Popup um zu sehen, ob ein Fehler angezeigt wird.

    – Rob W

    3. Mai 2012 um 7:21 Uhr


  • Das funktioniert prima mit "manifest_version": 2 im Manifest.

    – Sowiut

    22. August 2013 um 9:43 Uhr

  • Warum wird lastFocusedWindow über currentWindow verwendet?

    – Stuart P. Bentley

    29. Dezember 2013 um 13:23 Uhr

  • @StuartP.Bentley Spielt in diesem Fall keine Rolle. Sie beziehen sich beide auf das Fenster, das den Seitenaktionsdialog ausgelöst hat. Allerdings siehe developer.chrome.com/extensions/windows.html#aktuelles-Fenster für eine Anmerkung zur Bedeutung von currentWindow.

    – Rob W

    29. Dezember 2013 um 13:32 Uhr

Sie können auch Promises verwenden, um einen Tab sauberer abzurufen:

  getCurrentTab().then(function(tab){
    // Do something w/tab
  });

  function getCurrentTab(){
    return new Promise(function(resolve, reject){
      chrome.tabs.query({
        active: true,               // Select active tabs
        lastFocusedWindow: true     // In the current window
      }, function(tabs) {
        resolve(tabs[0]);
      });
    });
  }

998480cookie-checkWie erhalte ich die URL des aktuell geöffneten Tabs in meinem Seitenaktions-Popup?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy