Perguntas frequentes

Se você não encontrar uma resposta para sua pergunta aqui, consulte as Perguntas frequentes da Chrome Web Store, a tag [google-chrome-extension] no Stack Overflow, o grupo chromium-extensions ou a ajuda da Store.

Geral

O que são as extensões do Google Chrome?

As extensões do Google Chrome são aplicativos executados no navegador Chrome que oferecem mais funcionalidades, integração com sites ou serviços de terceiros e experiências de navegação personalizadas.

Como posso configurar o Chrome para o desenvolvimento de extensões?

Contanto que esteja usando uma versão do Chrome que ofereça suporte a extensões, você já tem tudo de que precisa para começar a criar uma extensão. Para começar, ative o modo de desenvolvedor.

Clique no ícone de menu do Google Chrome e selecione Extensões no menu Ferramentas. Verifique se a caixa de seleção "Modo do desenvolvedor" no canto superior direito está marcada. Agora você pode recarregar extensões, carregar um diretório descompactado de arquivos como se fosse uma extensão empacotada e muito mais. Para ver um tutorial completo, consulte Como começar.

Quais tecnologias são usadas para criar extensões para o Chrome?

As extensões são criadas usando as mesmas tecnologias padrão da Web que os desenvolvedores usam para criar sites. HTML é usado como linguagem de marcação de conteúdo, CSS para estilo e JavaScript para script. Como o Chrome é compatível com HTML5 e CSS3, os desenvolvedores podem usar as tecnologias da Web aberta mais recentes, como animações de tela e CSS, nas extensões deles. As extensões também têm acesso a várias APIs JavaScript que ajudam a executar funções como codificação JSON e interação com o navegador.

As extensões são buscadas na Web sempre que o navegador é carregado?

As extensões são transferidas por download pelo navegador Chrome durante a instalação e, em seguida, executadas no disco local para acelerar o desempenho. No entanto, se uma nova versão da extensão for enviada on-line, o download dela será automaticamente feito em segundo plano para todos os usuários que têm a extensão instalada. As extensões também podem fazer solicitações de conteúdo remoto a qualquer momento para interagir com um serviço da Web ou extrair novo conteúdo da Web.

Como determino qual versão do Chrome está implantada em qual canal?

Para saber qual versão do Chrome está disponível atualmente em cada uma das diferentes plataformas, acesse omahaproxy.appspot.com. Nesse site, você verá os dados em um formato semelhante a:

cf,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,canary,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####

Cada linha representa informações sobre uma combinação diferente de plataforma e canal. As plataformas listadas são cf (Frame do Google Chrome), linux, mac, win e cros (Google ChromeOS). Os canais listados são canary, dev, beta e stable. Os dois números de quatro partes após o canal representam as versões atuais e anteriores do Chrome implantadas nessa combinação de canal de plataforma. O restante das informações são metadados sobre quando as versões foram enviadas pela primeira vez, bem como os números de revisão associados a cada build.

Recursos

As extensões podem fazer solicitações Ajax entre domínios?

Sim. As extensões podem fazer solicitações entre domínios. Consulte esta página para mais informações.

As extensões podem usar serviços da web de terceiros?

Sim. As extensões podem fazer solicitações Ajax entre domínios, assim elas podem chamar APIs remotas diretamente. As APIs que fornecem dados no formato JSON são particularmente fáceis de usar.

As extensões podem codificar/decodificar dados JSON?

Sim, já que o V8 (o mecanismo JavaScript do Chrome) oferece suporte a JSON.stringify e JSON.parse de maneira nativa, é possível usar essas funções nas suas extensões conforme descrito aqui, sem incluir nenhuma outra biblioteca JSON no seu código.

As extensões podem armazenar dados localmente?

Sim, as extensões podem usar localStorage para armazenar dados de string permanentemente. Com as funções JSON integradas do Chrome, é possível armazenar estruturas de dados complexas no localStorage. Para extensões que precisam executar consultas SQL nos dados armazenados, o Chrome implementa bancos de dados SQL do lado do cliente, que também podem ser usados.

As extensões podem usar o OAuth?

Sim, existem extensões que usam OAuth para acessar APIs de dados remotos. A maioria dos desenvolvedores considera conveniente usar uma biblioteca OAuth do JavaScript para simplificar o processo de assinatura de solicitações OAuth.

As extensões podem criar interfaces fora da página renderizada?

Sim, a extensão pode adicionar botões à interface do usuário do navegador Chrome. Consulte ações do navegador e ações da página para mais informações.

Uma extensão também pode criar notificações pop-up, que existem fora da janela do navegador. Consulte a documentação sobre notificações na área de trabalho para mais detalhes.

As extensões podem detectar cliques em guias e botões de navegação do Chrome?

Não. As extensões são limitadas à detecção dos eventos descritos na documentação da API.

Duas extensões podem se comunicar umas com as outras?

Sim, as extensões podem transmitir mensagens para outras extensões. Consulte a documentação de transmissão de mensagens para mais informações.

As extensões podem usar o Google Analytics?

Sim, como as extensões são criadas como os sites, elas podem usar o Google Analytics para acompanhar o uso. No entanto, você precisa modificar o código de acompanhamento para extrair uma versão HTTPS da biblioteca do Google Analytics. Veja este tutorial para mais informações sobre como fazer isso.

As extensões podem modificar os URLs chrome://?

Não. As APIs de extensão foram projetadas para minimizar problemas de compatibilidade com versões anteriores que possam surgir quando novas versões do navegador forem enviadas. Permitir scripts de conteúdo em URLs chrome:// significaria que os desenvolvedores começariam a depender do DOM, CSS e JavaScript dessas páginas para permanecerem os mesmos. Na melhor das hipóteses, essas páginas não poderiam ser atualizadas tão rapidamente quanto estão sendo atualizadas agora. Na pior das hipóteses, a atualização de uma dessas páginas pode causar a falha de uma extensão, fazendo com que partes importantes do navegador parem de funcionar para os usuários dessa extensão.

É permitido substituir totalmente o conteúdo hospedado nesses URLs porque ele força um desenvolvedor de extensões a implementar todas as funcionalidades que quiser, sem depender da implementação interna do navegador.

As extensões podem abrir pop-ups de ação do navegador/da página sem interação do usuário?

Não, os pop-ups só poderão ser abertos se o usuário clicar na página correspondente ou na ação do navegador. Uma extensão não pode abrir o pop-up de maneira programática.

As extensões podem manter os pop-ups abertos depois que o usuário clica na tela?

Não, os pop-ups são fechados automaticamente quando o usuário foca em alguma parte do navegador fora dele. Não há como manter o pop-up aberto depois que o usuário sair da página.

As extensões podem ser notificadas quando são instaladas/desinstaladas?

É possível detectar o evento runtime.onInstalled para receber uma notificação quando a extensão é instalada ou atualizada ou quando o próprio Chrome é atualizado. Não há evento correspondente para quando sua extensão é desinstalada.

Desenvolvimento

Como faço para criar uma interface para a minha extensão?

As extensões usam HTML e CSS para definir as interfaces do usuário. Assim, é possível usar controles de formulário padrão para criar a IU ou estilizar a interface com CSS, como você faria com uma página da Web. Além disso, as extensões podem adicionar alguns elementos de IU limitados ao Chrome.

Quantos dados posso armazenar no localStorage?

As extensões podem armazenar até 5 MB de dados no localStorage.

Como crio um menu de opções para meu aplicativo?

Você pode permitir que os usuários definam opções para sua extensão criando uma página de opções, que é uma página HTML simples que será carregada quando um usuário clicar no botão "opções" da sua extensão. Essa página pode ler e gravar configurações no localStorage ou até mesmo enviar opções para um servidor da Web para que elas possam ser mantidas em vários navegadores.

Quais ferramentas de depuração estão disponíveis para desenvolvedores de extensões?

As ferramentas para desenvolvedores integradas do Chrome podem ser usadas para depurar extensões, assim como páginas da Web. Consulte este tutorial sobre depuração de extensões para mais informações.

Por que as correspondências de caracteres curinga não funcionam para domínios de nível superior (TLDs)?

Não é possível usar padrões de correspondência de caractere curinga como http://google.*/* para fazer a correspondência de TLDs (como http://google.es e http://google.fr) devido à complexidade de restringir essa correspondência apenas aos domínios desejados.

No exemplo de http://google.*/*, os domínios do Google seriam correspondentes, assim como http://google.someotherdomain.com. Além disso, muitos sites não são proprietários de todos os TLDs do domínio. Por exemplo, suponha que você queira usar http://example.*/* para corresponder a http://example.com e http://example.es, mas http://example.net é um site hostil. Se a extensão tiver um bug, o site hostil poderá atacar a extensão para ter acesso ao aumento de privilégios dela.

Você precisa enumerar explicitamente os TLDs em que quer executar a extensão.

Por que a API de gerenciamento não dispara eventos quando minha extensão é instalada/desinstalada?

A API de gerenciamento foi criada para ajudar a criar extensões de substituição de página "Nova guia". Ele não foi destinado a disparar eventos de instalação/desinstalações para a extensão atual.

Como uma extensão pode determinar se está sendo executada pela primeira vez?

É possível detectar o evento runtime.onInstalled. Confira esta entrada de perguntas frequentes.

Recursos e bugs

Acho que encontrei um bug. Como posso ter certeza de que ele será corrigido?

Ao desenvolver uma extensão, você pode encontrar um comportamento que não corresponde à documentação de extensões e pode ser o resultado de um bug no Chrome. A melhor coisa a fazer é garantir que um relatório de problemas adequado seja enviado e que a equipe do Chromium tenha informações suficientes para reproduzir o comportamento.

As etapas a serem seguidas para garantir isso são:

  1. Use uma extensão mínima de teste que demonstre o problema que você quer denunciar. Essa extensão precisa ter o mínimo de código possível para demonstrar o bug. Geralmente, ela precisa ter 100 linhas de código ou menos. Muitas vezes, os desenvolvedores descobrem que não conseguem reproduzir os problemas dessa maneira, o que é um bom indicador de que o bug está no código deles.
  2. Pesquise no Issue Tracker em http://crbug.com para ver se alguém informou um problema semelhante. A maioria dos problemas relacionados a extensões é registrada em component=Platform>Extensions. Portanto, para procurar um bug de extensão relacionado à função chrome.tabs.executeScript (por exemplo), pesquise "component=Platform>Extensions Type=Bug chrome.tabs.executeScript", que vai fornecer esta lista de resultados.
  3. Se você encontrar um bug que descreva seu problema, clique no ícone de estrela para receber uma notificação quando o bug receber uma atualização. Não responda ao bug dizendo "eu também" ou perguntando "quando isso será corrigido?". Essas atualizações podem fazer com que centenas de e-mails sejam enviados. Adicione um comentário somente se tiver informações (como um caso de teste melhor ou uma sugestão de correção) que possam ser úteis.
  4. Se você não encontrou nenhum bug apropriado para marcar com estrela, envie um novo relatório de problemas em http://crbug.com/new. Preencha este formulário da maneira mais explícita possível: escolha um título descritivo, explique as etapas para reproduzir o bug e descreva o comportamento esperado e o real. Anexe seu exemplo de teste ao relatório e adicione capturas de tela, se apropriado. Quanto mais fácil for seu relatório, maior será a chance de ele ser corrigido imediatamente.
  5. Aguarde a atualização do bug. A maioria dos bugs novos passa pela triagem em até uma semana, mas às vezes pode demorar mais para uma atualização. Não responda ao bug para perguntar quando o problema será corrigido. Se seu bug não for modificado depois de duas semanas, poste uma mensagem para o grupo de discussão com um link para o bug.
  6. Se você informou seu bug no grupo de discussão e foi direcionado para esta entrada de perguntas frequentes, responda à conversa original com um link para o bug que você marcou com estrela ou denunciou. Isso facilitará que outras pessoas com o mesmo problema encontrem o bug correto.

Tenho uma solicitação de recurso. Como faço para informar isso?

Se você identificar um recurso (especialmente se ele estiver relacionado a uma API experimental) que possa ser adicionado para melhorar a experiência de desenvolvimento de extensões, verifique se uma solicitação adequada foi registrada no Issue Tracker.

As etapas a serem seguidas para garantir isso são:

  1. Pesquise no Issue Tracker em http://crbug.com para ver se alguém solicitou um recurso semelhante. A maioria das solicitações relacionadas a extensões é arquivada em component=Platform>Extensions. Portanto, para procurar uma solicitação de recurso de extensão relacionada a atalhos de teclado (por exemplo), pesquise "component=Platform>Extensions Type=Feature shortcuts", que vai fornecer esta lista de resultados.
  2. Se você encontrar um tíquete que corresponda à sua solicitação, clique no ícone de estrela para receber uma notificação quando o bug receber uma atualização. Não responda ao bug dizendo "eu também" ou perguntando "quando isso será implementado?"; essas atualizações podem fazer com que centenas de e-mails sejam enviados.
  3. Se você não encontrou nenhum tíquete apropriado para marcar com estrela, envie uma nova solicitação em http://crbug.com/new. Forneça o máximo de detalhes possível ao preencher este formulário: escolha um título descritivo e explique exatamente qual recurso você quer e como planeja usá-lo.
  4. Aguarde o tíquete ser atualizado. A maioria das novas solicitações passa pela triagem em até uma semana, mas às vezes pode demorar mais para uma atualização. Não responda ao tíquete para perguntar quando o recurso será adicionado. Se o ingresso não for modificado depois de duas semanas, poste uma mensagem para o grupo de discussão com um link para sua solicitação.
  5. Se você denunciou sua solicitação no grupo de discussão e foi direcionado para esta entrada de perguntas frequentes, responda à conversa original com um link para o tíquete que você marcou com estrela ou abriu. Assim, outras pessoas com a mesma solicitação encontrarão o tíquete correto com mais facilidade.