Como posso obter o URL da guia atual de uma extensão do Google Chrome?
-
22-09-2019 - |
Pergunta
Estou me divertindo com o Google Chrome Extension e só quero saber como posso armazenar o URL da guia atual em uma variável?
Solução
Atualizar: o chrome.tabs.getSelected()
o método agora está descontinuado.
A maneira recomendada de obter o URL da guia atual é usar chrome.tabs.query()
.
Um exemplo de uso:
chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
var url = tabs[0].url;
});
Isso exige que você solicite acesso ao chrome.tabs
API em seu manifesto de extensão:
"permissions": [ ...
"tabs"
]
É importante observar que a definição da sua "guia atual" pode diferir dependendo das necessidades da sua extensão.
Contexto lastFocusedWindow: true
Na consulta é apropriada quando você deseja acessar a guia atual na janela focada do usuário (normalmente a janela mais alta).
Contexto currentWindow: true
Permite que você obtenha a guia atual na janela onde o código da sua extensão está atualmente em execução. Por exemplo, isso pode ser útil se sua extensão criar uma nova janela / pop -up (alterando o foco), mas ainda quiser acessar as informações da guia da janela onde a extensão foi executada.
Eu escolhi usar lastFocusedWindow: true
Neste exemplo, porque o Google chama casos em que currentWindow
Nem sempre está presente.
Você está livre para refinar ainda mais sua consulta de guias usando qualquer uma das propriedades definidas aqui: Chrome.tabs.Query
Outras dicas
Um amigo responde à minha pergunta.
Primeiro, você define as permissões para a API da TAB:
"permissions": [
"tabs"
]
E para armazenar o URL:
chrome.tabs.getSelected(null,function(tab) {
var tablink = tab.url;
});
Outras respostas assumem que você deseja conhecê -lo em um script pop -up ou plano de fundo.
Caso você queira saber o URL atual De um script de conteúdo, o JS Way padrão se aplica:
window.location.toString()
Você pode usar propriedades de window.location
Para acessar partes individuais do URL, como host, protocolo ou caminho.
O problema é que o Chrome.tabs.getSelected é assíncrono. Esse código abaixo geralmente não funciona conforme o esperado. O valor de 'Tablink' ainda será indefinido quando for escrito no console, porque o GetSelected ainda não invocou o retorno de chamada que redefine o valor:
var tablink;
chrome.tabs.getSelected(null,function(tab) {
tablink = tab.url;
});
console.log(tablink);
A solução é embrulhar o código em que você usará o valor em uma função e o invocou pelo getSelected. Dessa forma, você deve sempre ter um conjunto de valor, porque seu código terá que aguardar o valor fornecido antes de ser executado.
Tente algo como:
chrome.tabs.getSelected(null, function(tab) {
myFunction(tab.url);
});
function myFunction(tablink) {
// do stuff here
console.log(tablink);
}
Olá, aqui está uma amostra do Google Chrome que envia por e -mail o site atual para um amigo. A idéia básica por trás é o que você quer ... antes de tudo, ele busca o conteúdo da página (não interando para você) ... depois recebe o URL (<- boa parte)
Além disso, é um bom exemplo de código de trabalho, que eu prefiro com os documentos de leitura.
Pode ser encontrado aqui:Envie esta página por e -mail
Para aqueles que usam o context menu api
, os documentos não estão imediatamente claros sobre como obter informações da guia.
chrome.contextMenus.onClicked.addListener(function(info, tab) {
console.log(info);
return console.log(tab);
});
Você tem que verificar isto.
Html
<button id="saveActionId"> Save </button>
manifest.json
"permissions": [
"activeTab",
"tabs"
]
JavaScript
O código abaixo salvará todos os URLs da janela ativa no objeto JSON como parte do botão Clique.
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);