Jak vložit Global s webovými rozšířeními v Manifest V3

Pro ty z vás, kteří nejsou obeznámeni se světem vývoje webových rozšíření, se s Chrome schyluje k bouři. Google přestane podporovat verzi manifestu 2, kterou používá drtivá většina webových rozšíření. Manifest verze 3 zaznamenal mnoho změn, ale největší změnou je přesun od trvalých skriptů na pozadí k servisním pracovníkům. Toto...je...rozsáhlá...změna.

Změny z verze manifestu 2 na verzi 3 zahrnují:

  • Přechod z trvalého skriptu na pozadí na servisního pracovníka, který může zemřít po 5 minutách
  • Nepoužívá se <iframe> prvky nebo jiná rozhraní DOM API od servisního pracovníka
  • Všechna rozhraní API jsou založena na slibech
  • Omezení obsahu z pohledu CSP

Jednou z funkcí, kterou webová rozšíření často využívají, je spouštění skriptů při každém novém načtení stránky. Pro webové rozšíření, jako je MetaMask, musíme poskytnout globální window.ethereum pro použití dApps. Jak to tedy uděláme s manifestem verze 3?

Od verze Chrome v102 mohou vývojáři definovat world vlastnost s hodnotou isolated nebo main (na stránce) pro obsahové skripty. Zatímco vývojáři by měli definovat content_scripts v rozšíření manifest.json soubor main hodnota skutečně funguje (kvůli chybě Chrome), když ji programově definujete od servisního pracovníka:

await chrome.scripting.registerContentScripts([
  {
    id: 'inpage',
    matches: ['http://*/*', 'https://*/*'],
    js: ['in-page.js'],
    runAt: 'document_start',
    world: 'MAIN',
  },
]);

Ve výše uvedeném příkladu in-page.js se vloží a spustí na kartě hlavního obsahu pokaždé, když se načte nová stránka. Toto in-page.js sady souborů window.ethereum pro použití všech dApps. Pokud world je undefined nebo isolated , skript by se stále spouštěl, ale dělal by to v izolovaném prostředí.

Práce na Manifestu verze 3 je docela náročná, proto prosím obejměte svého nejbližšího vývojáře rozšíření. Existuje mnoho obrovských strukturálních změn a orientace v těchto změnách je brutální tlak!