Antworten:
Verwenden Sie chrome.tabs.query()
wie folgt:
chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => {
let url = tabs[0].url;
// use `url` here inside the callback because it's asynchronous!
});
Dies erfordert, dass Sie chrome.tabs
in Ihrem Erweiterungsmanifest Zugriff auf die API anfordern :
"permissions": [ ...
"tabs"
]
Es ist wichtig zu beachten, dass die Definition Ihrer "aktuellen Registerkarte" je nach den Anforderungen Ihrer Erweiterung unterschiedlich sein kann.
Die Einstellung lastFocusedWindow: true
in der Abfrage ist angemessen, wenn Sie auf die aktuelle Registerkarte im fokussierten Fenster des Benutzers zugreifen möchten (normalerweise das oberste Fenster).
Mit der Einstellung currentWindow: true
können Sie die aktuelle Registerkarte in dem Fenster abrufen, 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 ändern), aber dennoch über das Fenster, in dem die Erweiterung ausgeführt wurde, auf Registerkarteninformationen zugreifen möchte.
Ich habe mich für lastFocusedWindow: true
dieses Beispiel entschieden, da Google Fälle aufruft, in denen dies currentWindow
möglicherweise nicht immer der Fall ist .
Sie können Ihre Tab-Abfrage mithilfe einer der hier definierten Eigenschaften weiter verfeinern: chrome.tabs.query
Warnung! chrome.tabs.getSelected
ist veraltet . Bitte verwenden Sie chrome.tabs.query
wie in den anderen Antworten gezeigt.
Zunächst müssen Sie die Berechtigungen für die API in manifest.json festlegen:
"permissions": [
"tabs"
]
Und um die URL zu speichern:
chrome.tabs.getSelected(null,function(tab) {
var tablink = tab.url;
});
chrome.tabs.getSelected
ist undefiniert, soll ich es in einer separaten Frage stellen?
chrome.tabs.getSelected
Methode ist veraltet, die richtige Methode ist in der folgenden Antwort aufgeführt .
Bei anderen Antworten wird davon ausgegangen, dass Sie dies anhand eines Popup- oder Hintergrundskripts wissen möchten.
Wenn Sie die aktuelle URL aus einem Inhaltsskript kennen möchten , gilt die Standard-JS-Methode:
window.location.toString()
Mit den Eigenschaften von können Sie window.location
auf einzelne Teile der URL zugreifen, z. B. Host, Protokoll oder Pfad.
window.location.host
sehen, ob ich bei "stackoverflow.com" bin oder nicht.
match:"<all_urls>"
Situation im Abschnitt content_script, und Chrome empfiehlt <all_urls> nicht.
contentScript.js
und nicht in der ausführen background.js
. Übergeben Sie einfach alle Daten, die Sie aus der URL gefiltert haben, an die Nachricht an background.js
. Beispiel: let message = { type: "fetchVideoDate", id: getVideoId() };
wo getVideoId()
enthält eine Ausführung von window.location.toString()
. Andernfalls erhalten Sie einige chrome://temp_background_file.html
Daten. Beachten Sie auch, dass manchmal message
aufgerufen wird request
.
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 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 so zu verpacken, dass Sie den Wert in einer Funktion verwenden und diesen von getSelected aufrufen lassen. Auf diese Weise ist garantiert immer ein Wert festgelegt, 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);
}
Hallo, hier ist ein Google Chrome-Beispiel, das die aktuelle Website per E-Mail an einen Freund sendet. Die Grundidee dahinter ist, was Sie wollen ... zuerst wird der Inhalt der Seite abgerufen (was für Sie nicht interessant ist) ... danach wird die URL abgerufen (<- guter Teil)
Außerdem ist es ein schönes funktionierendes Codebeispiel, das ich lieber als Dokumente lese.
Hier finden Sie: E-Mail an diese Seite
Diese Lösung ist bereits getestet.
Legen Sie die Berechtigungen für die API in manifest.json fest
"permissions": [ ...
"tabs",
"activeTab",
"<all_urls>"
]
Beim ersten Laden Aufruffunktion. https://developer.chrome.com/extensions/tabs#event-onActivated
chrome.tabs.onActivated.addListener((activeInfo) => {
sendCurrentUrl()
})
Bei Änderungsaufruffunktion. https://developer.chrome.com/extensions/tabs#event-onSelectionChanged
chrome.tabs.onSelectionChanged.addListener(() => {
sendCurrentUrl()
})
die Funktion zum Abrufen der URL
function sendCurrentUrl() {
chrome.tabs.getSelected(null, function(tab) {
var tablink = tab.url
console.log(tablink)
})
Für diejenigen, die das verwenden context menu api
, ist in den Dokumenten nicht sofort klar, wie Registerkarteninformationen abgerufen werden können.
chrome.contextMenus.onClicked.addListener(function(info, tab) {
console.log(info);
return console.log(tab);
});
Sie haben auf überprüfen diese .
HTML
<button id="saveActionId"> Save </button>
manifest.json
"permissions": [
"activeTab",
"tabs"
]
JavaScript
Der folgende Code speichert alle URLs des aktiven Fensters im Rahmen eines Schaltflächenklicks 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);