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

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

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

Die empfohlene Methode zum chrome.tabs.query() 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; }); 

Dazu müssen Sie in Ihrem Erweiterungsmanifest Zugriff auf die chrome.tabs API chrome.tabs :

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

Es ist wichtig zu beachten, dass die Definition Ihres “aktuellen Tabs” abhängig von den Bedürfnissen Ihrer Erweiterung unterschiedlich sein kann.

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

Mit currentWindow: true können Sie die aktuelle Registerkarte in dem Fenster currentWindow: true in dem der Code Ihrer Erweiterung gerade ausgeführt wird. Dies kann beispielsweise nützlich sein, wenn Ihre Erweiterung ein neues Fenster / Popup erstellt (Fokus wird geändert), aber dennoch auf Registerinformationen aus dem Fenster zugreifen möchte, in dem die Erweiterung ausgeführt wurde.

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

Sie können Ihre Tabulatorabfrage mithilfe einer der hier definierten Eigenschaften weiter verfeinern: chrome.tabs.query

Ein Freund antwortet auf meine Frage.

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

 "permissions": [ "tabs" ] 

Und um die URL zu speichern:

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

Das Problem ist, dass chrome.tabs.getSelected asynchron ist. Dieser Code wird im Allgemeinen nicht wie erwartet funktionieren. Der Wert von ‘tablink’ ist immer noch nicht definiert, wenn er in die Konsole geschrieben wird, da getSelected den Callback, 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 zu umbrechen, in dem Sie den Wert in einer function verwenden möchten, und dies von getSelected aufrufen zu lassen. Auf diese Weise haben Sie garantiert immer einen Wert festgelegt, da Ihr Code auf die Bereitstellung des Werts warten muss, 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); } 

Andere Antworten gehen davon aus, dass Sie es aus einem Popup- oder Hintergrundskript wissen möchten.

Falls Sie die aktuelle URL aus einem Inhaltsskript kennen möchten, gilt die Standard-JS-Methode:

 window.location.toString() 

Sie können die Eigenschaften von window.location um auf einzelne Teile der URL wie Host, Protokoll oder Pfad zuzugreifen.

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 … zuerst holt es den Inhalt der Seite (nicht interessant für Sie) … danach erhält es die URL (< - guter Teil)

Außerdem ist es ein schönes funktionierendes Codebeispiel, das ich lieber dem Lesen von Dokumenten vorziehe.

Kann hier gefunden werden: Email diese Seite

Für diejenigen, die das context menu api , ist den Dokumenten nicht sofort klar, wie man Tab-Informationen erhält.

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

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

Sie müssen dies überprüfen.

HTML

  

manifest.json

  "permissions": [ "activeTab", "tabs" ] 

JavaScript
Der folgende Code speichert alle URLs des aktiven Fensters als Teil des Schaltflächen-Klicks im JSON-Objekt.

 var saveActionButton = document.getElementById('saveActionId'); saveActionButton.addEventListener('click', function() { myArray = []; chrome.tabs.query({"currentWindow": true}, //{"windowId": targetWindow.id, "index": tabPosition}); function (array_of_Tabs) { //Tab tab arrayLength = array_of_Tabs.length; //alert(arrayLength); for (var i = 0; i < arrayLength; i++) { myArray.push(array_of_Tabs[i].url); } obj = JSON.parse(JSON.stringify(myArray)); }); }, false);