Het recht activeTab

Het recht "activeTab" geeft een extensie tijdelijk toegang tot het op dat moment actieve tabblad als de gebruiker de extensie aanroept, bijvoorbeeld door op de actie te klikken. De toegang tot het tabblad duurt zolang de gebruiker op die pagina is en wordt ingetrokken als de gebruiker weggaat of het tabblad sluit. Als de gebruiker de extensie bijvoorbeeld aanroept op https://example.com en daarna naar https://example.com/foo gaat, heeft de extensie nog steeds toegang tot de pagina. Als de gebruiker naar https://chromium.org gaat, wordt de toegang ingetrokken.

Dit is een alternatief voor veel toepassingen van "<all_urls>", maar er wordt geen waarschuwingsbericht getoond tijdens de installatie:

Zonder "activeTab":

Zonder activeTab

Met "activeTab":

Met activeTab

Er wordt geen toegang verleend tot beperkte pagina's, zoals chrome://-pagina's.

Voorbeeld

Bekijk de voorbeeldextensie 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
    });
  }
});

Motivatie

Overweeg een extensie voor webclipping met een actie en een contextmenu-item. Deze extensie heeft misschien alleen toegang tot tabbladen nodig als er op de actie wordt geklikt of als het contextmenu-item wordt uitgevoerd.

Zonder "activeTab" zou deze extensie volledige, permanente toegang tot elke website moeten aanvragen, alleen maar om het werk te kunnen doen als de gebruiker de extensie aanroept. Dat is veel macht om toe te vertrouwen aan zo'n eenvoudige extensie. En als de extensie ooit wordt gehackt, krijgt de aanvaller toegang tot alles wat de extensie had.

Een extensie met het recht "activeTab" krijgt daarentegen alleen toegang tot een tabblad als reactie op een expliciete gebruikersactivatie. Als de extensie is gehackt, moet de aanvaller wachten tot de gebruiker de extensie aanroept voordat deze toegang krijgt. En die toegang duurt alleen totdat het tabblad wordt genavigeerd of gesloten.

Wat activeTab toestaat

Als het recht "activeTab" aanstaat voor een tabblad, kan een extensie het volgende doen:

  • Roep scripting.insertCSS() of scripting.executeScript() aan op dat tabblad als het "scripting"-recht ook is gedefinieerd (zoals in het voorbeeld hierboven).
  • De URL, titel en favicon voor dat tabblad ophalen via een API die een tabs.Tab-object retourneert (in wezen verleent "activeTab" tijdelijk hostrechten).
  • Onderschep netwerkverzoeken in het tabblad naar de oorsprong van het hoofdframe van het tabblad met de webRequest API. De extensie krijgt tijdelijk hostrechten voor de oorsprong van het hoofdframe van het tabblad.

activeTab aanroepen

De volgende gebruikersactivaties zetten het recht "activeTab" aan: