2009-12-30 8 views

Répondre

64

Un ami répond à ma question.

D'abord, vous avez à 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; 
}); 
+0

La deuxième partie du code est pour le cas d'un fichier popup – Axiol

+1

La raison pour laquelle c'est juste pour le popup (action de la page, action du navigateur) est parce que vous envoyez un "null" dans le premier paramètre. http://code.google.com/chrome/extensions/tabs.html#method-getSelected L'état docs le premier paramètre est le windowId, si vous voulez l'utiliser dans les options, ou la page d'arrière-plan, vous auriez besoin pour mettre dans l'id de la fenêtre ou vous obtiendrez l'onglet actuel votre vision qui est indéfini, les options respectivement. –

+1

oui cela fonctionne, mais je ne sais pas pourquoi la méthode chrome.tabs.getSelected est introuvable dans le document de référence. – swimmingfisher

2

Salut est ici un échantillon Google Chrome les e-mails du Site en cours à 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 (pas interessant pour vous) ... après il obtient l'URL (< - bonne partie)

De plus, il est un bel exemple de code de travail, que je préfère timidement à la lecture de documents.

se trouvent ici: Email this page

24

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 elle être undefined encore lorsqu'il est écrit à la console car getSelected n'a pas encore invoqué le rappel qui remet à zéro la valeur:

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

La solution consiste à envelopper le code où vous utiliserez la valeur dans une fonction et avoir celle invoquée par getSelected. De cette façon, vous avez toujours une valeur définie, car votre code devra attendre que la valeur soit fournie avant d'être exécutée.

Essayez quelque chose comme:

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

function myFunction(tablink) { 
    // do stuff here 
    console.log(tablink); 
} 
+0

Merci pour le code, cela a fonctionné pour moi, "tabs" doit être ajouté aux autorisations dans le fichier manifest.json "permissions": [ "tabs" ] –

+0

Aussi cela fonctionne comme un charme: [Obtenir la fenêtre actuelle sur un popup (extension Google Chrome)] (http://stackoverflow.com/questions/3030738/getting-current-window-on-a-popup-google-chrome-extension) – chemark

+0

Et, comment obtenir liens de tous les onglets ouverts – Enve

118

Mise à jour: La méthode chrome.tabs.getSelected() est maintenant dépréciée.

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 exige que vous demandez l'accès à l'API chrome.tabs dans votre extension manifest:

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

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

Le paramètre lastFocusedWindow: true dans la requête est approprié lorsque vous souhaitez accéder à l'onglet en cours dans la fenêtre de l'utilisateur (généralement la fenêtre la plus haute).

Le réglage currentWindow: true vous permet d'obtenir l'onglet actuel dans la fenêtre où le code de votre poste 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 veut quand même 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 appelle les cas dans lesquels currentWindowmay not always be present.

Vous êtes libre d'affiner votre onglet requête en utilisant l'une des propriétés définies ici: chrome.tabs.query

+13

Pourquoi l'URL est-elle toujours indéfinie? – nnm

+0

Si l'url n'est pas définie, essayez de recharger votre extension à partir de chrome: // extensions Cela rechargera la configuration de l'extension et appliquera l'autorisation "onglets" nouvellement ajoutée. – flashbackzoo

+1

url est indéfini parce que http://stackoverflow.com/questions/28786723/why-doesnt-chrome-tabs-query-return-the-tabs-url-when-called-using-requirejs (réponse: fermez la fenêtre de vos outils de développement ou changez en currentWindow au lieu de lastFocusedWindow) – kspearrin

0

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

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

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

-1

Vous devez vérifier this.

HTML

<button id="saveActionId"> Save </button> 

manifest.json

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

JavaScript
Le code ci-dessous enregistrera toutes les urls de fenêtre active en objet JSON dans le cadre du bouton Cliquez sur.

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); 
+0

Mon extension chromatique pour l'enregistrement des URL sur les fenêtres actives est https://chrome.google.com/webstore/detail/tabstore-plugin/jngplpdonggccbjlmbphlbancacmpmpp –

14

D'autres réponses supposent que vous voulez le connaître à partir d'un script contextuel ou d'arrière-plan.

Si vous voulez connaître l'URL actuelle à partir d'un script de contenu, la manière standard JS applique:

window.location.toString() 

Vous pouvez utiliser les propriétés de window.location pour accéder à des parties individuelles de l'URL, comme hôte , protocole ou chemin.

+0

thumb up, la solution la plus simple. – dalvarezmartinez1

+0

Bonne réponse. Tout ce que je voulais, c'était 'window.location.host' pour voir si je suis sur" stackoverflow.com "ou non. – Salyangoz