Estou me divertindo com a extensão do Google Chrome e só quero saber como posso armazenar o URL da guia atual em uma variável?
Estou me divertindo com a extensão do Google Chrome e só quero saber como posso armazenar o URL da guia atual em uma variável?
Use chrome.tabs.query()
assim:
chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => {
let url = tabs[0].url;
// use `url` here inside the callback because it's asynchronous!
});
Isso requer que você solicite acesso à chrome.tabs
API no 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.
A configuração lastFocusedWindow: true
na consulta é apropriada quando você deseja acessar a guia atual na janela focada do usuário (normalmente a janela superior).
A configuração currentWindow: true
permite que você obtenha a guia atual na janela em que o código da sua extensão está atualmente em execução. Por exemplo, isso pode ser útil se sua extensão cria uma nova janela / pop-up (mudança de foco), mas ainda deseja acessar as informações da guia na janela em que a extensão foi executada.
Eu escolhi usar lastFocusedWindow: true
neste exemplo, porque o Google chama casos em que currentWindow
nem sempre podem estar presentes .
Você pode refinar ainda mais a consulta da guia usando qualquer uma das propriedades definidas aqui: chrome.tabs.query
Aviso!
chrome.tabs.getSelected
está obsoleto . Por favor, usechrome.tabs.query
como mostrado nas outras respostas.Primeiro, você deve definir as permissões para a API no manifest.json:
E para armazenar a URL:
fonte
chrome.tabs.getSelected
está indefinida, devo perguntar em uma pergunta separada?chrome.tabs.getSelected
método foi preterido, o método correto está listado nesta resposta abaixo .Outras respostas assumem que você deseja conhecê-lo em um script pop-up ou em segundo plano.
Caso você queira saber a URL atual de um script de conteúdo , a maneira JS padrão se aplica:
Você pode usar propriedades de
window.location
para acessar partes individuais da URL, como host, protocolo ou caminho.fonte
window.location.host
ver se eu estava no "stackoverflow.com" ou não.match:"<all_urls>"
situação na seção content_script e o Chrome não é recomendado <all_urls>.contentScript.js
e não nobackground.js
. Basta passar os dados filtrados do URL para a mensagembackground.js
. Exemplo:let message = { type: "fetchVideoDate", id: getVideoId() };
ondegetVideoId()
contém uma execução dewindow.location.toString()
. Caso contrário, você obterá algunschrome://temp_background_file.html
dados. Observe também que às vezesmessage
é chamadorequest
.O problema é que chrome.tabs.getSelected é assíncrono. Este código abaixo geralmente não funcionará conforme o esperado. O valor de 'tablink' ainda será indefinido quando for gravado no console porque getSelected ainda não invocou o retorno de chamada que redefine o valor:
A solução é agrupar o código no qual você usará o valor em uma função e chamará o getSelected. Dessa forma, você sempre terá um valor definido, pois seu código terá que aguardar o valor ser fornecido antes de ser executado.
Tente algo como:
fonte
Olá, aqui está um exemplo do Google Chrome que envia por e-mail o site atual a um amigo. A idéia básica por trás é o que você deseja ... antes de tudo, busca o conteúdo da página (não é interessante para você) ... depois obtém o URL (<- boa parte)
Além disso, é um bom exemplo de código de trabalho, que eu prefiro mais do que ler documentos.
Pode ser encontrado aqui: Enviar por e-mail
fonte
Esta solução já foi testada.
definir permissões para a API no manifest.json
Na primeira função de chamada de carregamento. https://developer.chrome.com/extensions/tabs#event-onActivated
Na função de mudança de chamada. https://developer.chrome.com/extensions/tabs#event-onSelectionChanged
a função para obter o URL
fonte
Para aqueles que usam o
context menu api
, os documentos não são claros imediatamente sobre como obter informações da guia.https://developer.chrome.com/extensions/contextMenus
fonte
Você tem que verificar isso .
HTML
manifest.json
JavaScript
O código abaixo salvará todos os URLs da janela ativa no objeto JSON como parte do clique do botão.
fonte