Réponses:
Utilisez chrome.tabs.query()comme ceci:
chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => {
let url = tabs[0].url;
// use `url` here inside the callback because it's asynchronous!
});
Cela nécessite que vous demandiez l'accès à l' chrome.tabsAPI dans votre manifeste d'extension :
"permissions": [ ...
"tabs"
]
Il est important de noter que la définition de votre "onglet actuel" peut différer selon les besoins de votre extension.
La configuration lastFocusedWindow: truedans la requête est appropriée lorsque vous souhaitez accéder à l'onglet actuel dans la fenêtre ciblée de l'utilisateur (généralement la fenêtre la plus élevée).
Le paramètre currentWindow: truevous permet d'obtenir l'onglet actuel dans la fenêtre où le code de votre extension est en cours d'exécution. Par exemple, cela peut être utile si votre extension crée une nouvelle fenêtre / popup (changement de focus), mais souhaite toujours accéder aux informations de l'onglet depuis la fenêtre où l'extension a été exécutée.
J'ai choisi d'utiliser lastFocusedWindow: truedans cet exemple, car Google évoque les cas dans lesquels il se currentWindow peut que ce ne soit pas toujours présent .
Vous êtes libre d'affiner davantage votre requête d'onglet en utilisant l'une des propriétés définies ici: chrome.tabs.query
Avertissement! chrome.tabs.getSelectedest obsolète . Veuillez utiliser chrome.tabs.querycomme indiqué dans les autres réponses.
Tout d'abord, vous devez définir les autorisations pour l'API dans manifest.json:
"permissions": [
"tabs"
]
Et pour stocker l'URL:
chrome.tabs.getSelected(null,function(tab) {
var tablink = tab.url;
});
chrome.tabs.getSelectedn'est pas définie, dois-je la poser dans une question séparée?
chrome.tabs.getSelectedméthode est obsolète, la méthode correcte est répertoriée dans la réponse ci-dessous .
D'autres réponses supposent que vous voulez le savoir à partir d'un script contextuel ou d'arrière-plan.
Si vous souhaitez connaître l'URL actuelle à partir d'un script de contenu , la méthode standard JS s'applique:
window.location.toString()
Vous pouvez utiliser les propriétés de window.locationpour accéder à des parties individuelles de l'URL, telles que l'hôte, le protocole ou le chemin.
window.location.hostvoir si je suis sur "stackoverflow.com" ou non.
match:"<all_urls>"situation sur la section content_script et Chrome n'est pas recommandé <all_urls>.
contentScript.jset non dans le background.js. Transmettez simplement toutes les données que vous avez filtrées de l'URL dans le message background.js. Exemple: let message = { type: "fetchVideoDate", id: getVideoId() };où getVideoId()contient une exécution de window.location.toString(). Sinon, vous obtiendrez des chrome://temp_background_file.htmldonnées. Notez également que parfois messageest appelé request.
Le problème est que chrome.tabs.getSelected est asynchrone. Ce code ci-dessous ne fonctionnera généralement pas comme prévu. La valeur de 'tablink' sera toujours indéfinie lorsqu'elle est écrite dans la console car getSelected n'a pas encore appelé le rappel qui réinitialise la valeur:
var tablink;
chrome.tabs.getSelected(null,function(tab) {
tablink = tab.url;
});
console.log(tablink);
La solution consiste à encapsuler le code là où vous utiliserez la valeur dans une fonction et à l'invoquer par getSelected. De cette façon, vous êtes assuré d'avoir toujours une valeur définie, car votre code devra attendre que la valeur soit fournie avant d'être exécuté.
Essayez quelque chose comme:
chrome.tabs.getSelected(null, function(tab) {
myFunction(tab.url);
});
function myFunction(tablink) {
// do stuff here
console.log(tablink);
}
Bonjour, voici un exemple de Google Chrome qui envoie par e-mail le site actuel à un ami. L'idée de base derrière est ce que vous voulez ... tout d'abord, il récupère le contenu de la page (ce qui ne vous intéresse pas) ... ensuite, il obtient l'URL (<- bonne partie)
De plus, c'est un bon exemple de code de travail, que je préfère vivement à la lecture de documents.
Peut être trouvé ici: Envoyer cette page par e-mail
Cette solution est déjà TESTÉE.
définir les autorisations pour l'API dans manifest.json
"permissions": [ ...
"tabs",
"activeTab",
"<all_urls>"
]
Lors de la première fonction d'appel de charge. https://developer.chrome.com/extensions/tabs#event-onActivated
chrome.tabs.onActivated.addListener((activeInfo) => {
sendCurrentUrl()
})
Sur la fonction d'appel de changement. https://developer.chrome.com/extensions/tabs#event-onSelectionChanged
chrome.tabs.onSelectionChanged.addListener(() => {
sendCurrentUrl()
})
la fonction pour obtenir l'URL
function sendCurrentUrl() {
chrome.tabs.getSelected(null, function(tab) {
var tablink = tab.url
console.log(tablink)
})
Pour ceux qui utilisent le context menu api, les documents ne sont pas immédiatement clairs sur la façon d'obtenir des informations sur les onglets.
chrome.contextMenus.onClicked.addListener(function(info, tab) {
console.log(info);
return console.log(tab);
});
Vous devez vérifier cela .
HTML
<button id="saveActionId"> Save </button>
manifest.json
"permissions": [
"activeTab",
"tabs"
]
JavaScript
Le code ci-dessous enregistrera toutes les URL de la fenêtre active dans l'objet JSON lors d'un clic sur le bouton.
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);