Dev & EngARTIGO

Chrome Extension: scripts e acessos

Extensões para Chrome são scripts feitos em JavaScript que podem ter um conteúdo visual, e que interagem com a página em que você está no navegador.

Hoje vou falar um pouco de Chrome Extensions, pois precisei estudar bastante para desenvolver a nova ferramenta da minha startup que é uma extensão para Chrome, futuramente liberada também para Firefox, disponível para teste beta em https://goo.gl/1ui3sU. Achei o tema interessante, pois tive muito problema para resolver. Primeiramente, vamos entender como funciona uma extensão para Google Chrome…

Aparentemente, as extensões para Chrome são scripts feitos em JavaScript↳JavaScript116 conteúdosJavaScript em 2020: O que esperarDev (Back & Front) · jan 2020Campos públicos e privados em classes JavaScript – O que vem por aí no ESNextDev (Back & Front) · abr 201929 anos de JavaScript!Dev (Back & Front) · jan 2025Ver tudo em Dev (Back & Front) → que podem ou não conter um conteúdo visual, e que interagem com a página em que você está no navegador, porém essa interação é limitada por questões de segurança, então basicamente existem três tipos de scripts que podem ser criados para sua extensão.

Scripts de conteúdo

O primeiro e mais comum são scripts que rodam em ligação parcial com a página aberta – é possível inserir, editar e remover elementos via JavaScript, além de adicionar bibliotecas como jQuery e AngularJS para facilitar o desenvolvimento, mas o content_script não tem acesso ao window da página. Sendo assim, não será possível executar, por exemplo, scripts existentes na página. Para criar um content_scripts, basta adicionar no manifest.json as seguintes linhas:

"content_scripts": [{
    "js": ["jquery-3.0.0.min.js", "contentscript.js"],
    "css": ["css/style.css"],
    "matches": ["*://*/*"]
}],

No exemplo acima, foram solicitados o jQuery e um script personalizado chamado coontentscript.js. Perceba que é possível chamar quantos arquivos forem necessários. Ainda é possível chamar CSS, e suas bibliotecas não irão influenciar a página diretamente, já que os escopos são separados. Veja a ilustração da documentação:

arch-3

Para rodar um content_script, será necessária uma permissão de leitura e escrita de abas que deve ser informada no próprio manifest.json:

"permissions": [
    "tabs"     
]

Lembrando: será possível realizar manipulação de componentes do document, mass não será possível acessar o window. A documentação completa está disponível em: https://developer.chrome.com/extensions/content_scripts

Scripts de background

O script de background será utilizado para rotinas que dependem de acesso total ao Chrome e suas abas, porém esse modo não tem acesso ao document. É possível, por exemplo, implementar Push Browser diretamente no background, mas não será possível realizar interação entre o background e o content_script – eles rodam em ‘instâncias’ diferentes. Para implementar um script em background, será necessário informar no manifest.json:

"background": {
    "persistent": false,
    "scripts": ["OneSignal.js", "background.js"]
},

Perceba que no exemplo acima, utilizei o OneSignal para Push Browser. A implementação é bem simples, vou deixar o link tanto da documentação dos scripts background: https://developer.chrome.com/extensions/background_pages quanto da documentação do OneSignal para Chrome Extension: https://documentation.onesignal.com/docs/chrome-app-sdk-installation

O parâmetro ‘persistent’ define se o script ficará rodando de formar contínua, ou se será apenas executado uma única vez, caso haja necessidade de realizar monitoramentos, por exemplo.

Recursos acessíveis Web

O terceiro modo de script possui interação direta com o window e o document, mas não possui interação entre os content scripts e background. A minha sugestão é utilizar campos hidden caso haja necessidade de uma comunicação, já que o content_scripts e o injection possuem ambos acesso ao document, pelo menos foi a forma como consegui resolver o problema de disparar eventos do window da aba. Para implementar um injetion, serão necessárias duas etapas. Primeiro, informe no manifest.json quais scripts estão autorizados a ser injetado na aba:

"web_accessible_resources": ["facebookSDK.js", "script.js"],

No meu caso, estou usando API do Facebook para gerar telas de compartilhamento, e possui um script personalizado. Dentro do content scripts, adicione a chamada do script

//FacebookSDK
var s = document.createElement('script');
s.src = chrome.extension.getURL('facebookSDK.js');
s.onload = function() {this.parentNode.removeChild(this);};
(document.head || document.documentElement).appendChild(s);

Quero terminar o artigo deixando um abraço aos meus sócios do It’simple e da 1001 Cupom de Descontos por terem concebido essa que, para mim, é a ferramenta mais útil que eu já fiz. Comparação em tempo real e checkout automático de cupons na própria loja eram um sonho que se tornou real graças essa parceria, e a todos os meus queridos leitores deixo mais uma vez o link para o teste beta https://goo.gl/1ui3sU. Vejam o vídeo de explicação do uso do radar, e a lista de lojas parceira do projeto está disponível em https://itssimple.com.br/stats.

é autodidata em desenvolvimento de sistemas, analista de sistemas/programador com mais de 10 anos de experiência de mercado. Formação em Marketing pela Faculdade Anhanguera e em formação em Direito pela Faculdade Estácio de Sá. Empreendedor serial, criador dos blogs Node Decode e BR.JS, das ferramentas Crawler.com.br, Hawk, Take and Make, Baixou (https://www.baixou.com.br/) e It'simple (https://itssimple.com.br/), entre outros. Experiência em desenvolvimento de buscadores de produtos, webcrawlers, arquitetura de software, desenvolvimento de software, gestão de empresas, gestão comercial, gestão de mídias e mídias sociais, Atualmente CTO do It'simple (https://itssimple.com.br/), redator do BR.JS (http://brjs.com.br/) e palestrante em eventos de tecnologia como Google GDG, Google I/O (http://webes.com.br/io16/).

Mais de André Ferreira
Ver perfil →
Leia também