El permiso "activeTab"

El permiso "activeTab" otorga a una extensión acceso temporal a la pestaña activa en ese momento cuando el usuario invoca la extensión, por ejemplo, haciendo clic en su acción. El acceso a la pestaña dura mientras el usuario está en esa página y se revoca cuando el usuario sale de ella o cierra la pestaña. Por ejemplo, si el usuario invoca la extensión en https://example.com y, luego, navega a https://example.com/foo, la extensión seguirá teniendo acceso a la página. Si el usuario navega a https://chromium.org, se revoca el acceso.

Esta opción sirve como alternativa para muchos usos de "<all_urls>", pero no muestra ningún mensaje de advertencia durante la instalación:

Sin "activeTab":

Sin activeTab

Si usas "activeTab", ejecuta el siguiente comando:

Con activeTab

No se otorga acceso a páginas restringidas, como las páginas chrome://.

Ejemplo

Consulta la extensión de ejemplo Page Redder:

manifest.json:

{
  "name": "Page Redder",
  "version": "2.0",
  "permissions": [
    "activeTab",
    "scripting"
  ],
  "background": {
    "service_worker": "service-worker.js"
  },
  "action": {
    "default_title": "Make this page red"
  },
  "manifest_version": 3
}

service-worker:

function reddenPage() {
  document.body.style.backgroundColor = 'red';
}

browser.action.onClicked.addListener((tab) => {
  // If the tab URL is not set, it is a restricted page.
  if (tab.url) {
    browser.scripting.executeScript({
      target: { tabId: tab.id },
      func: reddenPage
    });
  }
});

Motivación

Considera una extensión de recorte web que tenga una acción y un elemento de menú contextual. Es posible que esta extensión solo necesite acceder a las pestañas cuando se hace clic en su acción o cuando se ejecuta su elemento de menú contextual.

Sin "activeTab", esta extensión necesitaría solicitar acceso completo y persistente a todos los sitios web, solo para poder realizar su trabajo si el usuario la llama. Es mucho poder para confiarle a una extensión tan simple. Y si la extensión se ve comprometida, el atacante obtiene acceso a todo lo que tenía la extensión.

En cambio, una extensión con el permiso "activeTab" solo obtiene acceso a una pestaña en respuesta a un gesto explícito del usuario. Si la extensión se ve comprometida, el atacante deberá esperar a que el usuario la invoque antes de obtener acceso. Y ese acceso solo dura hasta que se navega por la pestaña o se cierra.

Qué permite "activeTab"

Mientras el permiso "activeTab" esté habilitado para una pestaña, una extensión puede hacer lo siguiente:

  • Llama a scripting.insertCSS() o scripting.executeScript() en esa pestaña si también se declara el permiso "scripting" (como en el ejemplo anterior).
  • Obtener la URL, el título y el ícono de página de esa pestaña a través de una API que devuelve un objeto tabs.Tab (en esencia, "activeTab" otorga permiso de host de forma temporal)
  • Interceptar solicitudes de red en la pestaña al origen del marco principal de la pestaña con la API de webRequest La extensión obtiene temporalmente permisos de host para el origen del marco principal de la pestaña.

Cómo invocar activeTab

Los siguientes gestos del usuario habilitan el permiso "activeTab":