Preguntas frecuentes

Si no encuentras una respuesta a tu pregunta aquí, prueba las Preguntas frecuentes de Chrome Web Store, la etiqueta [google-chrome-extension] en Stack Overflow, el grupo de Chromium extensions o la ayuda de la tienda.

General

¿Qué son las extensiones de Google Chrome?

Las extensiones de Google Chrome son aplicaciones que se ejecutan dentro del navegador Chrome y proporcionan funcionalidades adicionales, integración con sitios web o servicios de terceros, y experiencias de navegación personalizadas.

¿Cómo puedo configurar Chrome para el desarrollo de extensiones?

Siempre y cuando uses una versión de Chrome que admita extensiones, tendrás todo lo que necesitas para comenzar a escribir una extensión propia. Para comenzar, activa el modo de desarrollador.

Haz clic en el ícono de menú de Chrome y selecciona Extensiones en el menú Herramientas. Asegúrate de que esté marcada la casilla de verificación "Modo de desarrollador" que aparece en la esquina superior derecha. Ahora puedes volver a cargar extensiones, cargar un directorio desempaquetado de archivos como si fuera una extensión empaquetada y mucho más. Para ver un instructivo completo, consulta Cómo comenzar.

¿Qué tecnologías se usan para escribir extensiones para Chrome?

Las extensiones se escriben con las mismas tecnologías web estándar que usan los desarrolladores para crear sitios web. HTML se usa como lenguaje de marcado de contenido, CSS se usa para definir estilos y JavaScript para secuencias de comandos. Debido a que Chrome es compatible con HTML5 y CSS3, los desarrolladores pueden usar las tecnologías web abiertas más recientes, como el lienzo y las animaciones CSS en sus extensiones. Las extensiones también tienen acceso a varias APIs de JavaScript que ayudan a realizar funciones como la codificación JSON y la interacción con el navegador.

¿Se recuperan las extensiones de la Web cada vez que se carga el navegador?

El navegador Chrome descarga las extensiones en el momento de la instalación y, luego, se ejecutan fuera del disco local para acelerar el rendimiento. Sin embargo, si se lanza una versión nueva de la extensión en línea, se descargará automáticamente en segundo plano para todos los usuarios que la tengan instalada. Las extensiones también pueden realizar solicitudes de contenido remoto en cualquier momento para interactuar con un servicio web o extraer contenido nuevo de ella.

¿Cómo puedo determinar qué versión de Chrome se implementa en qué canal?

Para determinar qué versión de Chrome está disponible actualmente en cada una de las plataformas, visita omahaproxy.appspot.com. En ese sitio, verás datos en un formato similar al siguiente:

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 línea representa información sobre una combinación diferente de plataforma y canal. Las plataformas que se muestran son cf (Google Chrome Frame), linux, mac, win y cros (Google Chrome OS). Los canales enumerados son canary, dev, beta y stable. Los dos números de cuatro partes después del canal representan las versiones actual y anterior de Chrome implementadas en esa combinación de canal y plataforma. El resto de la información son metadatos sobre cuándo se enviaron las versiones por primera vez, así como los números de revisión asociados con cada compilación.

Capacidades

¿Las extensiones pueden realizar solicitudes Ajax multidominio?

Sí. Las extensiones pueden realizar solicitudes multidominio. Consulta esta página para obtener más información.

¿Las extensiones pueden usar servicios web de terceros?

Sí. Las extensiones son capaces de realizar solicitudes Ajax multidominio, por lo que pueden llamar a las APIs remotas de forma directa. Las APIs que proporcionan datos en formato JSON son particularmente fáciles de usar.

¿Las extensiones pueden codificar/decodificar datos JSON?

Sí, debido a que V8 (el motor JavaScript de Chrome) admite JSON.stringify y JSON.parse de forma nativa, puedes usar estas funciones en tus extensiones como se describe aquí sin incluir ninguna biblioteca JSON adicional en tu código.

¿Las extensiones pueden almacenar datos de forma local?

Sí, las extensiones pueden usar localStorage para almacenar datos de cadena de forma permanente. Con las funciones JSON integradas de Chrome, puedes almacenar estructuras de datos complejas en localStorage. Para las extensiones que necesitan ejecutar consultas de SQL en sus datos almacenados, Chrome implementa bases de datos de SQL del cliente, que también se pueden usar.

¿Las extensiones pueden usar OAuth?

Sí, hay extensiones que usan OAuth para acceder a las APIs de datos remotas. Para la mayoría de los desarrolladores, es conveniente usar una biblioteca OAuth de JavaScript para simplificar el proceso de firma de solicitudes de OAuth.

¿Las extensiones pueden crear la IU fuera de la página web renderizada?

Sí, tu extensión puede agregar botones a la interfaz de usuario del navegador Chrome. Consulta las acciones del navegador y las acciones de la página para obtener más información.

Una extensión también puede crear notificaciones emergentes, que existen fuera de la ventana del navegador. Consulta la documentación sobre notificaciones de escritorio para obtener más detalles.

¿Las extensiones pueden escuchar los clics en las pestañas y botones de navegación de Chrome?

No. Las extensiones solo pueden escuchar los eventos descritos en la documentación de la API.

¿Pueden dos extensiones comunicarse entre sí?

Sí, las extensiones pueden pasar mensajes a otras extensiones. Consulta la documentación sobre la transmisión de mensajes para obtener más información.

¿Las extensiones pueden utilizar Google Analytics?

Sí, dado que las extensiones se crean al igual que los sitios web, se puede usar Google Analytics para hacer un seguimiento del uso. Sin embargo, debes modificar el código de seguimiento para extraer una versión HTTPS de la biblioteca de Google Analytics. Para obtener más información sobre cómo hacerlo, consulta este instructivo.

¿Las extensiones pueden modificar las URLs chrome://?

No. Las APIs de extensiones se diseñaron para minimizar los problemas de retrocompatibilidad que pueden surgir cuando se envían versiones nuevas del navegador. Permitir secuencias de comandos de contenido en las URLs de chrome:// significaría que los desarrolladores comenzarían a depender del DOM, CSS y JavaScript de estas páginas para permanecer iguales. En el mejor de los casos, estas páginas no se podrían actualizar tan rápido como se están actualizando en este momento. En el peor de los casos, podría significar que la actualización de una de estas páginas puede provocar que una extensión se rompa, lo que hace que partes clave del navegador dejen de funcionar para los usuarios de esa extensión.

La razón por la que se permite reemplazar el contenido alojado en estas URLs por completo es porque esto obliga a un desarrollador de extensiones a implementar todas las funciones que desea sin depender de que la implementación interna del navegador permanezca igual.

¿Las extensiones pueden abrir ventanas emergentes de acción de página o navegador sin interacción del usuario?

No, las ventanas emergentes solo se pueden abrir si el usuario hace clic en la página o acción del navegador correspondiente. Una extensión no puede abrir su ventana emergente de manera programática.

¿Las extensiones pueden mantener las ventanas emergentes abiertas después de que el usuario hace clic fuera de ellas?

No, las ventanas emergentes se cierran automáticamente cuando el usuario se centra en alguna parte del navegador fuera de la ventana emergente. No hay forma de mantener la ventana emergente abierta después de que el usuario sale de la página.

¿Las extensiones pueden recibir notificaciones cuando se instalan o desinstalan?

Puedes escuchar el evento runtime.onInstalled para recibir una notificación cuando se instala o actualiza tu extensión, o cuando se actualiza Chrome. No hay ningún evento correspondiente para el momento en que se desinstala la extensión.

Desarrollo

¿Cómo creo una IU para mi extensión?

Las extensiones usan HTML y CSS para definir sus interfaces de usuario, por lo que puedes usar controles de formulario estándar para compilar tu IU o diseñar la interfaz con CSS, como lo harías con una página web. Además, las extensiones pueden agregar algunos elementos limitados de la IU a Chrome.

¿Cuántos datos puedo almacenar en localStorage?

Las extensiones pueden almacenar hasta 5 MB de datos en localStorage.

¿Cómo creo un menú de opciones para mi aplicación?

A fin de permitir que los usuarios configuren opciones para tu extensión, crea una página de opciones, que es una página HTML simple que se carga cuando el usuario hace clic en el botón de opciones de tu extensión. Esta página puede leer y escribir la configuración en localStorage o incluso enviar opciones a un servidor web para que puedan conservarse en todos los navegadores.

¿Qué herramientas de depuración están disponibles para los desarrolladores de extensiones?

Las herramientas para desarrolladores integradas en Chrome se pueden usar para depurar extensiones y páginas web. Consulta este instructivo sobre cómo depurar extensiones para obtener más información.

¿Por qué las coincidencias de comodines no funcionan para los dominios de nivel superior (TLD)?

No puedes usar patrones de coincidencia con comodines, como http://google.*/*, para hacer coincidir TLD (como http://google.es y http://google.fr) debido a la complejidad de restringir esa coincidencia solo a los dominios deseados.

En el ejemplo de http://google.*/*, se coincidirían los dominios de Google, pero también http://google.someotherdomain.com. Además, muchos sitios no son propietarios de todos los TLD de su dominio. Por ejemplo, supongamos que quieres usar http://example.*/* para hacer coincidir http://example.com y http://example.es, pero http://example.net es un sitio hostil. Si la extensión tiene un error, el sitio hostil podría atacarla para obtener acceso a los mayores privilegios de la extensión.

Debes enumerar explícitamente los TLD en los que deseas ejecutar tu extensión.

¿Por qué la API de Management no activa eventos cuando se instala o desinstala mi extensión?

El objetivo de la API de administración era ayudar a crear extensiones nuevas de reemplazo de páginas de pestañas. No se pretenía activar eventos de instalación o desinstalación para la extensión actual.

¿Cómo puede una extensión determinar si se está ejecutando por primera vez?

Puedes escuchar el evento runtime.onInstalled. Consulta esta entrada de Preguntas frecuentes.

Características y errores

Creo que encontré un error. ¿Cómo puedo asegurarme de que se solucione?

Mientras desarrollas una extensión, es posible que encuentres un comportamiento que no coincide con la documentación de las extensiones y que se deba a un error en Chrome. Lo mejor que puedes hacer es asegurarte de que se presente un informe de problema adecuado y de que el equipo de Chromium tenga suficiente información para reproducir el comportamiento.

Sigue estos pasos para asegurarte de hacerlo:

  1. Presenta una extensión de prueba mínima que demuestre el problema que quieres informar. Esta extensión debe tener la menor cantidad de código posible para demostrar el error. En general, debería ser de 100 líneas de código o menos. Muchas veces, los desarrolladores descubren que no pueden reproducir sus problemas de esta manera, lo que es un buen indicador de que el error está en su propio código.
  2. Busca en la Herramienta de seguimiento de errores, en http://crbug.com, para ver si alguien informó un problema similar. La mayoría de los problemas relacionados con las extensiones se archivan en component=Platform>Extensions, por lo que, por ejemplo, para buscar un error de extensión relacionado con la función chrome.tabs.executeScript, busca "component=Platform>Extensions Type=Bug chrome.tabs.executeScript", que te mostrará esta lista de resultados.
  3. Si encuentras un error que describe tu problema, haz clic en el ícono de estrella para recibir una notificación cuando el error reciba una actualización. No respondas al error con la frase "yo también" ni preguntes "¿cuándo se solucionará este problema?", ya que esas actualizaciones pueden generar que se envíen cientos de correos electrónicos. Agrega un comentario solo si tienes información (como un mejor caso de prueba o una corrección sugerida) que pueda ser útil.
  4. Si no encontraste un error apropiado para destacar, envía un informe de problema nuevo en http://crbug.com/new. Sé lo más explícito posible cuando completes este formulario: elige un título descriptivo, explica los pasos para reproducir el error y describe el comportamiento esperado y el real. Adjunta tu ejemplo de prueba al informe y, si corresponde, agrega capturas de pantalla. Cuanto más fácil sea para otras personas reproducir el problema el informe, mayor será la probabilidad de que el error se solucione con rapidez.
  5. Espera a que se actualice el error. La mayoría de los errores nuevos se clasifican en una semana, aunque a veces puede llevar más tiempo una actualización. No respondas al error para preguntar cuándo se solucionará. Si el error no se modificó después de dos semanas, publica un mensaje en el grupo de discusión con un vínculo al error.
  6. Si originalmente informaste tu error en el grupo de discusión y se te dirigió a esta entrada de Preguntas frecuentes, responde a la conversación original con un vínculo al error que destacaste o informaste. Esto hará que sea más fácil para otras personas con el mismo problema encontrar el error correcto.

Tengo una solicitud de función. ¿Cómo hago para denunciarlo?

Si identificas una función (en especial si está relacionada con una API experimental) que se podría agregar para mejorar la experiencia de desarrollo de extensiones, asegúrate de registrar una solicitud adecuada en la Herramienta de seguimiento de errores.

Sigue estos pasos para asegurarte de hacerlo:

  1. Busca en la Herramienta de seguimiento de errores, en http://crbug.com, para ver si alguien solicitó una función similar. La mayoría de las solicitudes relacionadas con extensiones se archivan en component=Platform>Extensions, por lo que, por ejemplo, para buscar una solicitud de función de extensión relacionada con combinaciones de teclas, busca "component=Platform>Extensions Type=Feature shortcuts", que te proporcionará esta lista de resultados.
  2. Si encuentras un ticket que coincide con tu solicitud, haz clic en el ícono de estrella para recibir una notificación cuando el error reciba una actualización. No respondas al error diciendo “yo también” ni preguntes “¿cuándo se implementará esto?”, ya que esas actualizaciones pueden generar que se envíen cientos de correos electrónicos.
  3. Si no encontraste un ticket adecuado para destacar, envía una nueva solicitud en http://crbug.com/new. Sé lo más detallado posible cuando completes este formulario: elige un título descriptivo y explica con exactitud qué característica te gustaría y cómo piensas usarla.
  4. Espera a que se actualice el ticket. La mayoría de las solicitudes nuevas se clasifican en una semana, aunque a veces pueden llevar más tiempo una actualización. No respondas al ticket para preguntar cuándo se agregará la función. Si tu ticket no se modificó después de dos semanas, publica un mensaje en el grupo de discusión con un vínculo a tu solicitud.
  5. Si originalmente denunciaste tu solicitud en el grupo de discusión y se te dirigió a esta entrada de Preguntas frecuentes, responde a la conversación original con un vínculo al ticket que destacaste o abriste. Esto hará que sea más fácil para otras personas con la misma solicitud encontrar el ticket correcto.