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!