Risposte:
Usa chrome.tabs.query()
così:
chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => {
let url = tabs[0].url;
// use `url` here inside the callback because it's asynchronous!
});
Ciò richiede che tu richieda l'accesso chrome.tabs
all'API nel tuo manifest di estensione :
"permissions": [ ...
"tabs"
]
È importante notare che la definizione della tua "scheda corrente" può variare a seconda delle esigenze della tua estensione.
L'impostazione lastFocusedWindow: true
nella query è appropriata quando si desidera accedere alla scheda corrente nella finestra focalizzata dell'utente (in genere la finestra più in alto).
L'impostazione currentWindow: true
consente di ottenere la scheda corrente nella finestra in cui è attualmente in esecuzione il codice dell'estensione. Ad esempio, questo potrebbe essere utile se l'estensione crea una nuova finestra / popup (modificando lo stato attivo), ma desidera comunque accedere alle informazioni sulla scheda dalla finestra in cui è stata eseguita l'estensione.
Ho scelto di utilizzare lastFocusedWindow: true
in questo esempio, perché Google chiama casi in cui currentWindow
potrebbe non essere sempre presente .
Sei libero di perfezionare ulteriormente la query della scheda utilizzando una delle proprietà definite qui: chrome.tabs.query
Avvertimento! chrome.tabs.getSelected
è deprecato . Si prega di utilizzare chrome.tabs.query
come mostrato nelle altre risposte.
Innanzitutto, devi impostare le autorizzazioni per l'API in manifest.json:
"permissions": [
"tabs"
]
E per memorizzare l'URL:
chrome.tabs.getSelected(null,function(tab) {
var tablink = tab.url;
});
chrome.tabs.getSelected
non è definita, dovrei farla in una domanda separata?
chrome.tabs.getSelected
metodo è stato deprecato, il metodo corretto è elencato nella seguente risposta .
Altre risposte presuppongono che tu voglia conoscerlo da un popup o da uno script in background.
Nel caso in cui si desideri conoscere l'URL corrente da uno script di contenuto , si applica il modo JS standard:
window.location.toString()
È possibile utilizzare le proprietà di window.location
per accedere a singole parti dell'URL, come host, protocollo o percorso.
window.location.host
vedere se sono su "stackoverflow.com" o no.
match:"<all_urls>"
situazione nella sezione content_script e Chrome non è consigliato <all_urls>.
contentScript.js
e non in background.js
. Passa semplicemente tutti i dati che hai filtrato dall'URL nel messaggio a background.js
. Esempio: let message = { type: "fetchVideoDate", id: getVideoId() };
dove getVideoId()
contiene un'esecuzione di window.location.toString()
. Altrimenti otterrai alcuni chrome://temp_background_file.html
dati. Si noti inoltre che a volte message
viene chiamato request
.
Il problema è che chrome.tabs.getSelected è asincrono. Questo codice di seguito non funzionerà generalmente come previsto. Il valore di 'tablink' sarà ancora indefinito quando viene scritto sulla console perché getSelected non ha ancora invocato il callback che reimposta il valore:
var tablink;
chrome.tabs.getSelected(null,function(tab) {
tablink = tab.url;
});
console.log(tablink);
La soluzione è racchiudere il codice in cui verrà utilizzato il valore in una funzione e farlo richiamare da getSelected. In questo modo avrai la certezza di avere sempre un valore impostato, perché il tuo codice dovrà attendere che il valore venga fornito prima che venga eseguito.
Prova qualcosa del tipo:
chrome.tabs.getSelected(null, function(tab) {
myFunction(tab.url);
});
function myFunction(tablink) {
// do stuff here
console.log(tablink);
}
Salve, ecco un esempio di Google Chrome che invia il sito corrente a un amico. L'idea di base dietro è ciò che vuoi ... prima di tutto recupera il contenuto della pagina (non interessante per te) ... poi ottiene l'URL (<- buona parte)
Inoltre è un bell'esempio di codice funzionante, che preferisco volutamente alla lettura di Documenti.
Puoi trovarlo qui: Invia questa pagina per e-mail
Questa soluzione è già TESTATA.
imposta le autorizzazioni per l'API in manifest.json
"permissions": [ ...
"tabs",
"activeTab",
"<all_urls>"
]
Al primo caricamento della funzione di chiamata. https://developer.chrome.com/extensions/tabs#event-onActivated
chrome.tabs.onActivated.addListener((activeInfo) => {
sendCurrentUrl()
})
Al cambio della funzione di chiamata. https://developer.chrome.com/extensions/tabs#event-onSelectionChanged
chrome.tabs.onSelectionChanged.addListener(() => {
sendCurrentUrl()
})
la funzione per ottenere l'URL
function sendCurrentUrl() {
chrome.tabs.getSelected(null, function(tab) {
var tablink = tab.url
console.log(tablink)
})
Per coloro che usano il context menu api
, i documenti non sono immediatamente chiari su come ottenere informazioni sulla scheda.
chrome.contextMenus.onClicked.addListener(function(info, tab) {
console.log(info);
return console.log(tab);
});
Devi controllare questo .
HTML
<button id="saveActionId"> Save </button>
manifest.json
"permissions": [
"activeTab",
"tabs"
]
JavaScript
Il codice seguente salverà tutti gli URL della finestra attiva nell'oggetto JSON come parte del clic sul pulsante.
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);