Brindar opciones a los usuarios

Así como las extensiones permiten a los usuarios personalizar el navegador Chrome, la página de opciones habilita la personalización de la extensión. Utiliza opciones para habilitar funciones y permitir que los usuarios elijan qué funcionalidad es relevante para sus necesidades.

Ubica la página de opciones

Los usuarios pueden acceder a la página de opciones mediante un vínculo directo o haciendo clic con el botón derecho en el ícono de la extensión en la barra de herramientas y seleccionando las opciones. Además, para navegar a la página de opciones, los usuarios pueden abrir chrome://extensions, buscar la extensión deseada, hacer clic en Detalles y, luego, seleccionar el vínculo de opciones.

Vínculo de la página de opciones en la interfaz de usuario
Vínculo a la página Options.
Página de opciones del menú contextual
Haz clic con el botón derecho en el ícono de la extensión.

Escribe la página de opciones

El siguiente es un ejemplo de una página de opciones:

options.html:

<!DOCTYPE html>
<html>
  <head>
    <title>My Test Extension Options</title>
  </head>
  <body>
    <select id="color">
      <option value="red">red</option>
      <option value="green">green</option>
      <option value="blue">blue</option>
      <option value="yellow">yellow</option>
    </select>

    <label>
      <input type="checkbox" id="like" />
      I like colors.
    </label>

    <div id="status"></div>
    <button id="save">Save</button>

    <script src="options.js"></script>
  </body>
</html>

A continuación, se muestra un ejemplo de secuencia de comandos de opciones. Guárdalo en la misma carpeta que options.html. De esta manera, se guardan las opciones preferidas del usuario en todos los dispositivos con la API de storage.sync.

options.js:

// Saves options to chrome.storage
const saveOptions = () => {
  const color = document.getElementById('color').value;
  const likesColor = document.getElementById('like').checked;

  chrome.storage.sync.set(
    { favoriteColor: color, likesColor: likesColor },
    () => {
      // Update status to let user know options were saved.
      const status = document.getElementById('status');
      status.textContent = 'Options saved.';
      setTimeout(() => {
        status.textContent = '';
      }, 750);
    }
  );
};

// Restores select box and checkbox state using the preferences
// stored in chrome.storage.
const restoreOptions = () => {
  chrome.storage.sync.get(
    { favoriteColor: 'red', likesColor: true },
    (items) => {
      document.getElementById('color').value = items.favoriteColor;
      document.getElementById('like').checked = items.likesColor;
    }
  );
};

document.addEventListener('DOMContentLoaded', restoreOptions);
document.getElementById('save').addEventListener('click', saveOptions);

Por último, agrega el permiso "storage" al archivo de manifiesto de la extensión:

manifest.json:

{
  "name": "My extension",
  ...
  "permissions": [
    "storage"
  ]
  ...
}

Declara el comportamiento de la página de opciones

Existen dos tipos de páginas de opciones de extensión: de página completa e incorporadas. El tipo de opciones está determinada por la forma en que se declara en el manifiesto.

Opciones de página completa

Se mostrará una página de opciones de página completa en una pestaña nueva. Registra el archivo HTML de opciones en el manifiesto en el campo "options_page".

manifest.json:

{
  "name": "My extension",
  ...
  "options_page": "options.html",
  ...
}
Opciones de página completa
Las opciones de página completa se abrirán en una pestaña nueva.

Opciones incorporadas

La página de opciones incorporadas permite a los usuarios ajustar las opciones de las extensiones sin salir de la de administración de extensiones en un cuadro incorporado. Para declarar las opciones de incorporación, registra el archivo HTML en el campo "options_ui" del manifiesto de extensiones, con la clave "open_in_tab" establecida en false.

manifest.json:

{
  "name": "My extension",
  ...
  "options_ui": {
    "page": "options.html",
    "open_in_tab": false
  },
  ...
}
Opciones incorporadas
Opciones incorporadas.
page (string)
Especifica la ruta de acceso a la página de opciones, en relación con la raíz de la extensión.
open_in_tab (booleano)
Indica si la página de opciones de la extensión se abrirá en una pestaña nueva. Si se establece como false, la página de opciones de la extensión se incorpora en chrome://extensions en lugar de se abre en una pestaña nueva.

Considera las diferencias

Las páginas de opciones incorporadas dentro de chrome://extensions tienen diferencias sutiles de comportamiento con respecto a las páginas de opciones en las pestañas.

Vínculo a la página de opciones

Una extensión puede incluir un vínculo directo a la página de opciones llamando chrome.runtime.openOptionsPage() Por ejemplo, se puede agregar a una ventana emergente:

popup.html:

<button id="go-to-options">Go to options</button>
<script src="popup.js"></script>

popup.js:

document.querySelector('#go-to-options').addEventListener('click', function() {
  if (chrome.runtime.openOptionsPage) {
    chrome.runtime.openOptionsPage();
  } else {
    window.open(chrome.runtime.getURL('options.html'));
  }
});

API de Tabs

Debido a que el código de opciones incorporadas no se aloja en una pestaña, no se puede usar la API de Tabs. En su lugar, usa runtime.connect() y runtime.sendMessage(). si la página de opciones necesita manipular la pestaña contenedora.

APIs de mensajería

Si la página de opciones de una extensión envía un mensaje mediante runtime.connect(), runtime.sendMessage(), la pestaña del remitente no se configurará, y la URL del remitente será la URL de la página de opciones.

Tamaño

Las opciones incorporadas deberían determinar automáticamente su propio tamaño en función del contenido de la página. Sin embargo, es posible que el tamaño del cuadro incrustado no sea adecuado para algunos tipos de contenido. Este problema es más común para páginas de opciones que ajustan la forma de su contenido en función del tamaño de la ventana.

Si esto es un problema, proporciona las dimensiones mínimas fijas para la página de opciones para garantizar que el página incorporada tendrán un tamaño adecuado.