# Chrome Extensions > Crea y publica extensiones de Chrome con las mejores prácticas de Manifest V3: crear, modificar, depurar o entender extensiones, add-ons o APIs, y preparar su publicación en Chrome Web Store (permisos, rechazos, privacidad). Fuente: https://skillsagentes.com/skills/googlechrome/modern-web-guidance/chrome-extensions Markdown: https://skillsagentes.com/skills/googlechrome/modern-web-guidance/chrome-extensions.md Repositorio: https://github.com/GoogleChrome/modern-web-guidance Autor: GoogleChrome Licencia: Apache-2.0 Actualizado: el mes pasado Coste de contexto: 215 tok instalada, 6.6k tok al activarse, 30.6k tok con todos los archivos del bundle Bundle: 24 archivos, 119 KB Permisos que pide: ninguno declarado ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add GoogleChrome/modern-web-guidance --skill chrome-extensions --agent claude-code # Cursor npx -y skills add GoogleChrome/modern-web-guidance --skill chrome-extensions --agent cursor # Codex npx -y skills add GoogleChrome/modern-web-guidance --skill chrome-extensions --agent codex # Gemini CLI npx -y skills add GoogleChrome/modern-web-guidance --skill chrome-extensions --agent gemini # Windsurf npx -y skills add GoogleChrome/modern-web-guidance --skill chrome-extensions --agent windsurf # Cline npx -y skills add GoogleChrome/modern-web-guidance --skill chrome-extensions --agent cline ``` ## Qué hace - Construye extensiones de Chrome de calidad con Manifest V3, aplicando reglas obligatorias que evitan los fallos más comunes de extensiones rotas. - Mantiene CHROMEWEBSTORE.md como fuente única de verdad para publicar en Chrome Web Store: metadatos, justificación de permisos, privacidad e historial de versiones. - Aplica una checklist de verificación antes de entregar: Manifest V3, iconos reales, side panel, CSP, service workers, captura, userScripts y permisos. - Prepara el listado de la tienda con copy centrado en beneficios reales y sin detalles de implementación, y guía la respuesta a rechazos de revisión. - Usa las referencias de patrones de API correctas según el contexto: popup, side panel, content script, service worker, offscreen document, etc. ## Cuándo usarla - El usuario pide crear, modificar, depurar o entender extensiones de Chrome, add-ons o cualquier cosa que use la API de extensiones. - Aparecen términos como 'Chrome extension', 'manifest.json', 'content script', 'side panel', 'chrome.* API', 'declarativeNetRequest', 'omnibox' o 'context menu' en contexto de extensión. - El usuario quiere publicar una extensión en Chrome Web Store, prepararla para publicación, responder a un rechazo de revisión, justificar permisos o redactar una política de privacidad. - Se pide integrar funcionalidad con la UI del navegador Chrome, como popup, side panel, menú contextual, omnibox, scripts de usuario o captura de pantalla o pestaña. ## Qué la activa - "Crea una extensión de Chrome que resalte los resultados de búsqueda en cualquier página." - "Añade un side panel a mi extensión para mostrar el historial de la pestaña actual." - "¿Por qué `tab.url` me devuelve undefined en mi content script?" - "Prepara mi extensión para publicarla en Chrome Web Store: justifica los permisos y redacta la política de privacidad." - "Haz un content script que actualice el DOM por lotes sin bloquear el hilo principal." ## Antes de instalar - Requiere Chrome para probar y, para publicar, cuenta de Chrome Web Store. ## Archivos - SKILL.md — 26 KB - references/extensions/api-calling.md — 2 KB - references/extensions/auth-identity.md — 4 KB - references/extensions/content-scripts.md — 3 KB - references/extensions/context-menus.md — 2 KB - references/extensions/csp-sandbox.md — 5 KB - references/extensions/declarative-net-request.md — 3 KB - references/extensions/devtools.md — 3 KB - references/extensions/icons.md — 3 KB - references/extensions/media-capture.md — 5 KB - references/extensions/message-passing.md — 4 KB - references/extensions/omnibox.md — 2 KB - references/extensions/permissions.md — 5 KB - references/extensions/popup-ui.md — 2 KB - references/extensions/prompt-api.md — 4 KB - references/extensions/service-worker.md — 4 KB - references/extensions/side-panel.md — 4 KB - references/extensions/storage.md — 2 KB - references/extensions/tab-management.md — 4 KB - references/extensions/user-scripts.md — 9 KB - references/webstore/chromewebstore-template.md — 6 KB - references/webstore/privacy-policy.md — 4 KB - references/webstore/review-checklist.md — 7 KB - references/webstore/store-listing.md — 8 KB ## SKILL.md Reproducido tal cual desde GoogleChrome/modern-web-guidance bajo Apache-2.0. Esta sección es el documento original y está en inglés. # Chrome Extensions Build production-quality Chrome extensions using Manifest V3 and publish them to the Chrome Web Store. ## Part 1 — Building Extensions ### Mandatory Rules These address the most common causes of broken extensions. Violating any produces a non-functional build. #### 1. Icons: only reference files you create — or omit icons entirely ``` ❌ BROKEN — referencing files that don't exist or reusing one file for all sizes: "icons": { "16": "icon.png", "48": "icon.png", "128": "icon.png" } ✅ CORRECT — each size is a separate file at the correct pixel dimensions: "icons": { "16": "icons/icon-16.png", "48": "icons/icon-48.png", "128": "icons/icon-128.png" } (where icon-16.png is 16×16px, icon-48.png is 48×48px, icon-128.png is 128×128px) ✅ ALSO CORRECT — omit icons from manifest if you cannot generate real PNG files: (just remove the "icons" and "default_icon" fields — Chrome uses a default icon) ``` **If you include icon references, you MUST create the actual image files.** Generate them with a script (see `references/extensions/icons.md`) or leave them out. Never reference non-existent files. #### 2. Side panel: you MUST provide a way to open it Defining `"side_panel": {"default_path": "..."}` does NOT make it openable. Add a trigger: ```js // In service-worker.js — open side panel on extension icon click // IMPORTANT: chrome.action.onClicked ONLY fires when there is NO default_popup chrome.action.onClicked.addListener(async (tab) => { await chrome.sidePanel.open({ windowId: tab.windowId }); }); ``` If the extension has both a popup AND side panel, add a button in the popup that calls `chrome.sidePanel.open()`. Alternatively, use `chrome.sidePanel.setPanelBehavior({ openPanelOnActionClick: true })` — but the property is `openPanelOnActionClick`, NOT `openPanelOnActionIconClick`; the "Icon" variant causes a synchronous TypeError that silently aborts the service worker. Do NOT also define `default_popup` when using `setPanelBehavior`. See `references/extensions/side-panel.md`. #### 3. Code execution: sandboxed iframes ONLY Extension CSP blocks `eval()`, `new Function()`, inline `