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.tabs
API 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: true
dans 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: true
vous 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: true
dans 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.getSelected
est obsolète . Veuillez utiliser chrome.tabs.query
comme 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.getSelected
n'est pas définie, dois-je la poser dans une question séparée?
chrome.tabs.getSelected
mé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.location
pour accéder à des parties individuelles de l'URL, telles que l'hôte, le protocole ou le chemin.
window.location.host
voir 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.js
et 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.html
données. Notez également que parfois message
est 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);