Criar uma extensão do Chrome com Manifest V3 e permissões mínimas

Gere uma extensão de navegador completa com Manifest V3: manifest.json com permissões mínimas, service worker, content script, popup, mensagens, armazenamento e checklist para a Chrome Web Store. Pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Inclui 4 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.

Intermédio · Código · Pendente de revisão editorial

Prompt

Atua como programador especializado em extensões para navegadores baseados em Chromium com Manifest V3.

Contexto:
- O que a extensão deve fazer: {{proposito}}
- Sites onde funciona: {{sites}}
- Interface e pontos de entrada: {{interface}}
- Dados que guarda e se devem sincronizar entre dispositivos: {{dados}}

Entregáveis:
1. Arquitetura: o que fazem o service worker, o content script e o popup ou a página de opções, e como comunicam (chrome.runtime.sendMessage, portas), com um diagrama simples.
2. manifest.json completo com as permissões mínimas necessárias: justifica cada permissão e cada host_permissions; usa activeTab ou optional_permissions sempre que possível.
3. Código de cada ficheiro (service worker, content script, popup HTML/CSS/JS, opções se forem precisas) em JavaScript moderno, sem código remoto nem eval, respeitando a política de segurança de conteúdo do MV3.
4. Persistência com chrome.storage (local ou sync conforme {{dados}}), tendo em conta que o service worker pode parar a qualquer momento e não guarda estado em memória.
5. Acessibilidade básica do popup (etiquetas, foco, contraste) e textos preparados para tradução com _locales.
6. Como testar: carregar sem compactação em chrome://extensions, depurar o service worker e o content script, e casos de teste.
7. Checklist de publicação na Chrome Web Store: justificação das permissões, política de privacidade se tratar dados, capturas e ícones.

Restrições:
- Nada de recolha de dados nem rastreio que o utilizador não tenha pedido; se a extensão tratar dados pessoais, indica o que deve constar da política de privacidade.
- Se uma API puder variar entre versões, marca como [VERIFICAR na documentação de Chrome Extensions].
- Se não for claro o que a extensão deve fazer em cada site, pergunta-me primeiro.

Formato: secções numeradas, árvore de ficheiros e um bloco de código por ficheiro.

Como utilizar

Descreve o comportamento com um exemplo concreto («quando seleciono texto, clique direito e…»). Cria os ficheiros numa pasta, carrega-a como extensão sem compactação e testa cada caso antes de pensares em publicá-la.

Exemplo de utilização

Propósito: realçar a amarelo as palavras-chave escolhidas em qualquer artigo · Sites: todos, só ao clicar no ícone · Interface: popup e menu de contexto · Dados: lista de palavras sincronizada.

Exemplo de resultado

1. Arquitetura

Basta um popup: ao abri-lo, activeTab dá acesso temporário ao separador atual. Não é preciso service worker nem content script, o que reduz permissões e superfície de ataque.

2. manifest.json

{
  "manifest_version": 3,
  "name": "__MSG_extName__",
  "version": "1.0.0",
  "default_locale": "pt_PT",
  "action": { "default_popup": "popup.html", "default_title": "__MSG_saveTitle__" },
  "permissions": ["activeTab", "storage"]
}
  • activeTab: lê o título e o URL só quando o utilizador clica no ícone.
  • storage: guarda a lista em chrome.storage.sync.

3. popup.js

const list = document.querySelector('#list');

async function render() {
  const { links = [] } = await chrome.storage.sync.get('links');
  list.replaceChildren(...links.map(({ title, url }) => {
    const a = Object.assign(document.createElement('a'), { href: url, textContent: title, target: '_blank' });
    const li = document.createElement('li');
    li.append(a);                          // textContent: nunca innerHTML com dados da página
    return li;
  }));
}

document.querySelector('#save').addEventListener('click', async () => {
  const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
  if (!tab?.url) return;
  const { links = [] } = await chrome.storage.sync.get('links');
  if (!links.some((l) => l.url === tab.url)) {
    links.unshift({ title: tab.title || tab.url, url: tab.url, savedAt: Date.now() });
    await chrome.storage.sync.set({ links });
  }
  render();
});

render();

Atenção: o storage.sync tem um limite de tamanho por item; com uma única chave links, a lista enche depressa. Guarda cada link na sua própria chave ou passa para storage.local a partir de certo tamanho [VERIFICAR quotas na documentação de Chrome Extensions]…

Dados-chave

Categoria
Programação e desenvolvimento · Plugins
Tipo de resultado
Código
Nível
Intermédio
Pensado para
ChatGPT, Claude, Gemini e Microsoft Copilot
Verificado em
Pendente de verificação editorial
Variáveis
Propósito, Sites, Interface e Dados e sincronização
Idioma
Português
Preço
Gratuito, sem registo
Atualizado
07/11/2026

Perguntas frequentes

Vai funcionar no Edge, Brave ou Opera?

Em geral sim, porque usam Chromium e suportam Manifest V3, embora algumas APIs ou regras das respetivas lojas possam variar. Testa-a em cada navegador antes de a publicares lá.

Porquê pedir o mínimo de permissões?

Permissões amplas geram avisos que afastam utilizadores e prolongam a revisão na Chrome Web Store. Além disso, reduzem os danos caso a extensão tenha uma falha de segurança.

Para que serve este prompt?

Gere uma extensão de navegador completa com Manifest V3: manifest.json com permissões mínimas, service worker, content script, popup, mensagens, armazenamento e checklist para a Chrome Web Store.

Com que ferramentas de IA funciona?

Foi pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.

Como personalizo o prompt?

Clique em “Personalizar” e preencha as variáveis (Propósito, Sites, Interface e Dados e sincronização). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.

Preciso de experiência para o utilizar?

É de nível intermédio: convém conhecer o tema para fornecer bom contexto e rever o resultado com sentido crítico.

Este prompt é gratuito?

Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.

Posso confiar no resultado da IA?

Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.

Prompts relacionados