For these of you not acquainted with the world of internet extension growth, a storm is brewing with Chrome. Google will cease assist for manifest model 2, which is what the overwhelming majority of internet extensions use. Manifest model 3 sees many adjustments however the largest change is shifting from persistent background scripts to service employees. This…is…a…large…change.
Modifications from manifest model 2 to model 3 embrace:
- Going from persistent background script to a service employee that may die after 5 minutes
- No use of
<iframe>
components or different DOM APIs from the service employee - All APIs have change into Promise-based
- Restrictions on content material from a CSP perspective
One operate that internet extensions usually make use of is executing scripts upon every new web page load. For an online extension like MetaMask, we have to present a worldwide window.ethereum
for dApps to make use of. So how will we try this with manifest model 3?
As of Chrome v102, builders can outline a world
property with a worth of remoted
or fundamental
(within the web page) for content material scripts. Whereas builders ought to outline content_scripts
within the extension’s manifest.json
file, the fundamental
worth actually solely works (as a result of a Chrome bug) while you programmatically outline it from the service employee:
await chrome.scripting.registerContentScripts([ { id: 'inpage', matches: ['http://*/*', 'https://*/*'], js: ['in-page.js'], runAt: 'document_start', world: 'MAIN', }, ]);
Within the instance above, in-page.js
is injected and executed inside the primary content material tab each time a brand new web page is loaded. This in-page.js
file units window.ethereum
for all dApps to make use of. If the world
is undefined
or remoted
, the script would nonetheless execute however would achieve this in an remoted setting.
Manifest model 3 work is kind of the slog so please hug your closest extension developer. There are a lot of large structural adjustments and navigating these adjustments is a brutal push!