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?

Foi útil?

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);
  });

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

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top