web-dev-qa-db-fra.com

Comment obtenir l'URL de l'onglet en cours à partir d'une extension Google Chrome?

Je m'amuse avec l'extension Google Chrome et je veux juste savoir comment enregistrer l'URL de l'onglet en cours dans une variable.

161
Axiol

Mise à jour: La méthode chrome.tabs.getSelected() est maintenant obsolète.

La méthode recommandée pour obtenir l'URL de l'onglet en cours consiste à utiliser chrome.tabs.query().

Un exemple d'utilisation:

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

Cela nécessite que vous demandiez l'accès à l'API chrome.tabs dans votre manifeste d'extension :

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

Il est important de noter que la définition de votre "onglet actuel" peut varier en fonction des besoins de votre extension.

Il est approprié de définir lastFocusedWindow: true dans la requête lorsque vous souhaitez accéder à l'onglet actuel de la fenêtre ciblée par l'utilisateur (généralement la fenêtre la plus haute).

Régler currentWindow: true vous permet d’avoir 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/fenêtre contextuelle (changement de focus), mais souhaite tout de même accéder aux informations des onglets à partir de la fenêtre dans laquelle l'extension a été exécutée.

J'ai choisi d'utiliser lastFocusedWindow: true dans cet exemple, car Google appelle les cas dans lesquels currentWindowpeut ne pas toujours être présent .

Vous êtes libre d’affiner votre recherche par onglets en utilisant l’une des propriétés définies ici: chrome.tabs.query

183
thauburger

Un ami répond à ma question.

Tout d'abord, vous devez définir les autorisations pour l'API à onglet:

"permissions": [
    "tabs"
]

Et pour stocker l'URL:

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

D'autres réponses supposent que vous souhaitiez le savoir à partir d'un script contextuel ou contextuel.

Si vous souhaitez connaître l'URL actuelle à partir d'un script de conten, la méthode JS standard 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.

32
Xan

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' restera indéfinie lors de son écriture sur 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 à envelopper le code dans lequel vous utiliserez la valeur d'une fonction et à l'invoqué par getSelected. De cette façon, vous avez la garantie de toujours avoir une valeur définie, car votre code devra attendre que la valeur soit fournie avant son exécution.

Essayez quelque chose comme:

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

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

Bonjour, voici un exemple de Google Chrome qui envoie un e-mail au site actuel. 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)

En outre, il s’agit d’un bon exemple de code de travail, que je préfère plutôt que de lire des documents.

Peut être trouvé ici: Envoyer cette page par courriel

2
bastianneu

Pour ceux qui utilisent le context menu api, les docs ne sont pas immédiatement clairs sur la façon d'obtenir des informations de tabulation.

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

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

0
lfender6445