it-swarm.com.de

Wie kann ich die URL des aktuellen Tabs von einer Google Chrome Erweiterung) abrufen?

Ich habe Spaß mit der Erweiterung Google Chrome) und möchte nur wissen, wie ich die URL des aktuellen Tabs in einer Variablen speichern kann.

161
Axiol

Update: Die Methode chrome.tabs.getSelected() ist jetzt veraltet.

Die empfohlene Methode zum Abrufen der URL der aktuellen Registerkarte ist die Verwendung von chrome.tabs.query().

Eine Beispielverwendung:

chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
    var url = tabs[0].url;
});

Dies setzt voraus, dass Sie Zugriff auf die chrome.tabs API in Ihrem Erweiterungsmanifest :

"permissions": [ ...
   "tabs"
]

Beachten Sie, dass die Definition Ihres "aktuellen Tabs" je nach den Anforderungen Ihrer Erweiterung unterschiedlich sein kann.

Einstellung lastFocusedWindow: true in der Abfrage ist geeignet, wenn Sie auf die aktuelle Registerkarte im fokussierten Fenster des Benutzers zugreifen möchten (normalerweise das oberste Fenster).

Einstellung currentWindow: true ermöglicht es Ihnen, die aktuelle Registerkarte in dem Fenster abzurufen, in dem der Code Ihrer Erweiterung derzeit ausgeführt wird. Dies kann beispielsweise hilfreich sein, wenn Ihre Erweiterung ein neues Fenster/Popup erstellt (den Fokus ändert), aber weiterhin über das Fenster, in dem die Erweiterung ausgeführt wurde, auf Registerkarteninformationen zugreifen möchte.

Ich entschied mich für lastFocusedWindow: true in diesem Beispiel, weil Google Fälle aufruft, in denen currentWindowmöglicherweise nicht immer vorhanden .

Sie können Ihre Tab-Abfrage mit den hier definierten Eigenschaften weiter verfeinern: chrome.tabs.query

183
thauburger

Ein Freund beantwortet meine Frage.

Zuerst müssen Sie die Berechtigungen für die Registerkarte API festlegen:

"permissions": [
    "tabs"
]

Und um die URL zu speichern:

chrome.tabs.getSelected(null,function(tab) {
    var tablink = tab.url;
});
74
Axiol

Bei anderen Antworten wird davon ausgegangen, dass Sie es anhand eines Popup- oder Hintergrundskripts wissen möchten.

Wenn Sie die aktuelle URL kennen möchten aus einem Inhaltsskript, gilt der Standard-JS-Weg:

window.location.toString()

Mit den Eigenschaften von window.location Können Sie auf einzelne Teile der URL zugreifen, z. B. Host, Protokoll oder Pfad.

32
Xan

Das Problem ist, dass chrome.tabs.getSelected asynchron ist. Dieser Code unten funktioniert im Allgemeinen nicht wie erwartet. Der Wert von 'tablink' bleibt beim Schreiben in die Konsole weiterhin undefiniert, da getSelected den Rückruf, der den Wert zurücksetzt, noch nicht aufgerufen hat:

var tablink;
chrome.tabs.getSelected(null,function(tab) {
    tablink = tab.url;
});
console.log(tablink);

Die Lösung besteht darin, den Code dort einzuschließen, wo Sie den Wert in einer Funktion verwenden und diesen von getSelected aufrufen lassen. Auf diese Weise haben Sie garantiert immer einen festgelegten Wert, da Ihr Code warten muss, bis der Wert bereitgestellt wird, bevor er ausgeführt wird.

Versuchen Sie etwas wie:

chrome.tabs.getSelected(null, function(tab) {
    myFunction(tab.url);
});

function myFunction(tablink) {
  // do stuff here
  console.log(tablink);
}
25
Nyk Cowham

Hallo, hier ist ein Google Chrome Beispiel, das die aktuelle Site per E-Mail an einen Freund sendet. Die Grundidee dahinter ist, was Sie wollen ... Zunächst ruft es den Inhalt der Seite ab (nicht interesant für you) ... danach bekommt es die URL (<- good part)

Außerdem ist es ein gutes Beispiel für einen funktionierenden Code, das ich dem Lesen von Dokumenten vorziehen würde.

Kann hier gefunden werden: Email this page

2
bastianneu

Für diejenigen, die das context menu api, in den Dokumenten ist nicht sofort klar, wie Registerkarteninformationen abgerufen werden können.

  chrome.contextMenus.onClicked.addListener(function(info, tab) {
    console.log(info);
    return console.log(tab);
  });

https://developer.chrome.com/extensions/contextMenus

0
lfender6445