Chrome Extension - Script conteúdo que está sendo injetado várias vezes por carregamento de página única

StackOverflow https://stackoverflow.com/questions/7829895

Pergunta

Eu estou tendo alguns problemas com um script de conteúdo que está sendo injetado para a mesma página várias vezes em minha extensão Chrome.

Eu estou injetar o script de conteúdo de minha página "background.html", sobre a mudança Tab:

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){ 
    chrome.tabs.getSelected(null,function(tab){
         // Do some stuff
         chrome.tabs.executeScript(null, { code: code}, function(result){

... etc

Dentro do script de conteúdo, eu tenho algumas console.log comandos

O problema é que quando eu carregar uma página única, eu estou vendo cada um dos registros aparecem no console 2-4 vezes.

É muito claro para mim que isso está acontecendo por causa do iframe dentro da página, acho que, pelo menos ... Minha pergunta é por quê?

Eu vi na documentação que "all_frames" (o conteúdo da matriz permissões de script no manifesto) deve ser definido como "false" por padrão, resultando no script conteúdo apenas sendo injetado ao quadro superior da página, mas esta é simplesmente não acontece!

Por que é que está sendo injetado várias vezes? Preciso definir fisicamente "all_frames" para falsa?

Em segundo lugar:

Existe alguma maneira de dizer se a página que a extensão está tentando injetar o script de conteúdo para é um iframe ou superior de dentro da página "background.html"?

Eu tentei

if(window.top === window){ console.log('whatever'); }

E descobriu que ele não funciona 100% do tempo. Mesmo quando tenho que condicional em todo o resto do meu bloco de código (cerca de chrome.tabs.executeScript ()), eu ainda estou vendo o script de conteúdo injetado múltiplas vezes ....

Todas as idéias ou sugestões seria muito apreciada! :)

Foi útil?

Solução

onUpdated dispara cada vez que muda o estado de um guia. Isso inclui quando é Carregando e Concluído o carregamento , o que explica as muitas declarações de log. Você precisa verificar o que mudou (o URL alterado, ele carregado, etc.) cada vez que o evento é acionado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top