Dev (Back & Front)ARTIGO

Criando extensão para Google Chrome

Olá! Veremos neste artigo como criar uma extensão para o Google Chrome; primeiro faremos um hello world e, depois, uma outra que será capaz de fazer uma busca no Twitter, retornando os cinco
primeiros resultados.

Você vai adicionar um ícone para o Google Chrome que, quando clicado,
exibe uma página gerada automaticamente. As extensões são compatíveis
com qualquer versão do Google Chrome, em Windows, Mac ou LinuxLinux34 conteúdosKali Linux em um Servidor VPS: como, quando e por que usar?DevSecOps · dez 2024Construindo um Windows Service ou Linux Daemon com Worker Service & .NET Core – Parte 2Dev (Back & Front) · jul 2020Criando uma WebApi utilizando .NET, Linux e VSCodeDev (Back & Front) · ago 2019Ver tudo em DevSecOps .

Primeiro vamos criar uma pasta chamada minha_extensão. Dentro dessa pasta vamos criar o um arquivo chamado manifest.json e colocar dentro dele o seguinte código no formato json:

{<br />   "name": "Minha Primeira Extensão",<br />   "version": "1.0",<br />   "description": "Minha primeira extensão",<br />   "browser_action":{<br />      "default_icon": "icon16.png",<br />      "popup": "popup.html"<br />   }<br />}

Explicando as diretrizes

Crie uma imagem 16×16 em png para esse exemplo e o chame de icon16.png.

Crie
um arquivo de texto chamado popup.html. Esse arquivo nada mais é do que o
corpo do nosso aplicativo. Adicione o seguinte código a ele:

<html><br /><head><br /><style><br />html,body{width:425px;}<br /></style><br /></head><br /><body><br /><h1>Olá, Mundo!</h1><br /></body><br /></html>

Carregando a extensão

Vá até o menu “ferramenta” e clique em extensões. Abrirá uma página como a que está abaixo:

Nesta página, clique em modo do desenvolvedor; lá tem um botão
carregar uma extensão em desenvolvimento. Selecione a pasta e clique em
OK. Aparecerá um ícone do lado da barra de endereço, basta clicar nele para exibir o conteúdo da página.

Clique no ícone e você verá o resultado da nossa extensão.

Agora, vamos à parte prática: criar uma extensão integrada com o Twitter.

Extensão integrada com o Twitter

Vamos fazer uma
extensão capaz de fazer uma busca no Twitter retornando os cinco
primeiros resultados.

Criaremos os arquivos:

  • manifest.json
  • background.html
  • style.css
  • twitter.js
  • O diretório img onde as imagens ficarão.

Primeiro vamos criar e implementar o arquivo manifest.json.

{<br />  "name": "Twitter Search",<br />  "version": "1.0",<br />  "description": "Faça busca no twitter com essa extensão.",<br />  "browser_action": {<br />    "default_icon": "img/twitter-logo-19.png",<br />	"popup": "background.html"<br />  },<br />  "icons": {<br />	"19" : "img/twitter-logo-19.png",<br />    "48" : "img/twitter-logo-48.png",<br />    "128" : "img/twitter-logo-128.png"<br />  },<br />  "permissions": [<br />    "http://search.twitter.com/"<br />  ]<br />} 

Perceba que neste código existem duas novas diretrizes:

  • icons –  possibilita colocar os ícones da extensão;
  • permissions – seta permissão para que sejam feitas
    requisições para um determinada url. Neste caso, usei o endereço do
    twitter search http://search.twitter.com.

Agora criaremos o arquivo background. Como já falamos, ele é o arquivo
que será a interface da extensão. Usei para a implementação do
background html5 e css3. Não vou explicar muito sobre como fiz a
interface. Seguem abaixo os códigos:

background.html

<!DOCTYPE html><br /><html><br />    <head><br />        <link href='http://fonts.googleapis.com/css?family=Ubuntu:bold' rel='stylesheet' type='text/css' /><br />        <link href='style.css' rel='stylesheet' type='text/css' /><br />        <script src="twitter.js" type='text/javascript'></script><br />    </head><br />    <body><br />        <div><br />            <header><br />                <h1><img src="img/twitter-logo-large.png" width="100px"/></h1><br />            </header><br />            <section><br />                <input id="search" value="" placeholder="Digite o que est&aacute; procurando..." /><br />                <button id="buttonSearch">Buscar</button><br />            </section><br />            <div id="progressbar"><br />Carregando...<br /></div><br />            <section id="result"><br />                <header><h2>Resultado</h2></header><br />                <section id="response"><section><br />            </section><br />        </div><br />    </body><br /></html>

style.css

body{<br />    width:100%;<br />    color:#333;<br />    font-size:12pt;<br />    background: -webkit-gradient(linear, center bottom, center top, from(#eee),to(#fff));<br />    text-align:center;<br />}<br />body>div{<br />    width:500px;<br />    max-height:600px;<br />}<br />body>div>header>h1{<br />    display:block;<br />    margin:0;<br />    padding:0px;<br />}<br />header>h2{text-align:left;}<br />img{border:none;}<br />p{<br />    margin:0px;<br />    padding:0px;<br />    text-align:left;<br />}<br /><br />img#avatar{<br />    -webkit-box-shadow: 1px 1px 4px #555; <br />    float:left;<br />    padding:3px;<br />    margin-right:10px;<br />}<br /><br />#search<br />{<br />    -webkit-border-radius: 3px;<br />    border:1px solid #ddd;<br />    font-size:12pt;<br />    padding:5px;<br />    width:80%;<br />    color:#555;<br />}<br /><br />#buttonSearch<br />{<br />    -webkit-border-radius: 3px;<br />    -webkit-box-shadow: inset 1px 1px 3px #ccffFF;<br />    background: -webkit-gradient(linear, center bottom, center top, from(#33CCFF),to(#88ffFF));<br />    border: 1px solid #bbb;<br />    color: #fff;<br />    cursor:pointer;<br />    font-size:12pt;<br />    font-family: 'Ubuntu', arial, serif;<br />    padding:5px;<br />}<br /><br />#progressbar{<br />    display:none;<br />    text-align:center;<br />    color:#888;<br />    font-size:12pt;<br />}<br /><br />#result{<br />    display:none;<br />    width:99%;<br />}<br /><br />#list{<br />    list-style:none;<br />    margin:0px;<br />    padding:0px;<br />    overflow:hidden;<br />}<br /><br />#list>li{<br />    margin:0px;<br />    padding:5px 2px 5px 2px;<br />    overflow:hidden;<br />    border-bottom:1px dotted #ccc;<br />}

Vamos partir para o que interessa, que é o arquivo que realiza a lógica da aplicação, o twitter.js

Na realidade, a lógica é bem simples: fiz uma requisição ajax usando o XMLHttpRequest e a url da api, que é o twitter search, http://search.twitter.com/search.json?rpp=[numero de resultados por pagina]&q=[valor da busca]

// Elements<br />(function(window,document){<br /><br />	window.onload = function(){<br /><br />		var search 			= document.getElementById('search');<br />		var searchButton 		= document.getElementById('buttonSearch');<br />		var progressbar 		= document.getElementById("progressbar");<br />		var response 			= document.getElementById('response');<br />		var result 			= document.getElementById('result');<br /><br />		// executaa ação caso seja clicado no boção buscar<br />		searchButton.onclick = function()<br />		{<br />			if(search.value!="" && search.value!=null)<br />			{<br />				if(progressbar.style.display=="none" || progressbar.style.display=='') progressbar.style.display = "block";<br />				var url = "http://search.twitter.com/search.json?rpp=5&q="+search.value;<br />				ajaxGetRequest(url,createList);<br />			}<br />		}<br /><br />		// cria a lista com o resultado da busca<br />		function createList(json)<br />		{<br />			response.innerHTML=null;<br /><br />			var ul 	= document.createElement('ul');<br />			ul.id	= "list";<br /><br />			for(var i=0;i<json.results.length;i++)<br />			{<br />				var li = document.createElement('li');<br />				li.innerHTML = '<p><img src="'+json.results[i].profile_image_url+<br />								'" valign="top" id="avatar"/><b>@'+json.results[i].from_user+<br />								'</b> : '+json.results[i].text+'</p>';<br />				ul.appendChild(li);<br />			} <br /><br />                        response.appendChild(ul);<br /><br />			if(progressbar.style.display=="block")<br />				progressbar.style.display = "none";<br /><br />			if(result.style.display=="none" || result.style.display=='')<br />				result.style.display = "block";<br />		}<br /><br />		// função para a execução do ajax<br />		function ajaxGetRequest(url,callback)<br />		{<br />			var req = new XMLHttpRequest();<br />			req.open("GET",url,true);<br />			req.onreadystatechange  = function(data)<br />			{<br />				if(req.readyState == 4 && req.status == 200)<br />					callback(JSON.parse(req.responseText)) <br />				else <br />					callback(null)<br />			}<br />			req.send(null);<br />		}<br />	}<br />})(window,document);<br />;i++)>

Após a construção do javascript, é so instalar ou recarregar a extensão e testar!

Clique aqui para fazer o download do código-fonte.

Bom, infelizmente as agências não enxergam os plugins de browsers como uma
uma ferramenta de publicidade. Estão perdendo a oportunidade de criar
expêriencias maravilhosas para os usuários!

Espero que tenham gostado. Abraços!

Trabalhou em diversos projetos usando inteligencia artificial para mineração de dados e desenvolvimento de soluções para empresas como McDonalds e FAPESP. Atualmente, trabalha como analista de sistemas e desenvolvedor senior, desenvolvendo soluções para a aviação na LAN &amp; TAM Airlines.

Ver perfil