Documenten buiten het scherm in Manifest V3

Ian Stanion
Ian Stanion

Om de functionaliteit bij de overgang van achtergrondpagina's naar extensieservicewerknemers te vervangen, kunnen ontwikkelaars de chrome.offscreen API en manifestrechten gebruiken vanaf Chrome 109. Door deze toestemming aan te vragen, kunnen documenten buiten het scherm worden gemaakt om DOM API's te gebruiken zonder opdringerig nieuwe te openen vensters of tabbladen die de gebruikerservaring onderbreken. De chrome.offscreen API is nu beschikbaar in Chrome-extensies.

In Chromium zijn Manifest V3-extensies gebaseerd op servicemedewerkers, maar servicemedewerkers bieden geen ondersteuning voor dezelfde API's en mechanismen als volledige documentgebaseerde pagina's (inclusief achtergrond- en gebeurtenispagina's). Bovendien zorgt het gebruik van inhoudsscripts voor toegang tot DOM-API's op webpagina's ervoor dat de extensie van pagina tot pagina afhankelijk is van verschillende inhoudsbeveiligingsbeleidsregels. Om dit te helpen oplossen introduceren we Offscreen Documenten ter ondersteuning van DOM-gerelateerde functies en API's door Manifest V3-extensies toe te staan ​​minimale, bereikbare en relatief niet-geautoriseerde offscreen-documenten tijdens runtime te openen via een speciale API.

Functie-informatie

Omdat offscreen-documenten specifiek zijn ontworpen om gebruiksscenario's af te handelen die niet worden ondersteund door servicemedewerkers (bijvoorbeeld het afspelen van audio), staan ​​de levensduur van deze pagina en de machtigingen die eraan worden verleend, los van die van de extensieservicemedewerker. De pagina heeft een levenslang mechanisme dat vergelijkbaar is met gebeurtenispagina's in Manifest V2, in die zin dat de pagina wordt afgebroken wanneer deze stopt met het uitvoeren van acties. Bovendien kan de user-agent verdere beperkingen opleggen aan de levensduur die specifiek zijn voor het gespecificeerde doel. Offscreen-documenten zijn ontworpen om gaten in API's op te vullen die alleen toegankelijk zijn voor DOM-API's; Hierdoor hoeven uitbreidings-API's in deze context niet rechtstreeks te worden weergegeven. Om de kans te verkleinen dat extensies deze gebruiken als "vervanging van de achtergrondpagina", worden alleen de chrome.runtime berichten-API's blootgesteld aan het offscreen-document. (Ontwikkelaars kunnen ook webberichten gebruiken door het offscreen-document via hun servicemedewerker als klant te claimen.) Omdat sommige gebruiksscenario's (met name site scraping) toegang tot cross-origin-frames vereisen, staan ​​we toe dat deze documenten cross-origin-frames insluiten volgens dezelfde regels die extensiepagina's vandaag de dag hebben. In documenten buiten het scherm kunnen inhoudsscripts die door de extensie zijn gespecificeerd, in deze frames worden uitgevoerd om de benodigde inhoud te schrapen, zoals ze dat bij elke normale webpagina zouden doen.

Redenen en een doel vereisen

Voor het maken van een document buiten het scherm zijn gemotiveerde redenen en verdere rechtvaardiging vereist. Deze redenen worden vermeld in de API-referentiedocumentatie en gaan op verschillende manieren om met de levensduur van het document. Op een document dat is geopend voor het afspelen van audio gelden momenteel bijvoorbeeld andere regels voor de levensduur dan op een document dat is geopend voor klembordbeheer. U kunt ook meer details toevoegen over het doel van het document buiten het scherm in de motivering. Dit is een door de ontwikkelaar geschreven tekenreeks en geen parameter met effecten op het document. In de loop van de tijd kunnen er nog meer redenen aan de API worden toegevoegd als ontwikkelaars hun feedback en gebruiksscenario's delen.

In de toekomst

Voor een gemakkelijke implementatie ondersteunt de eerste versie van deze API slechts één pagina per extensie, per profiel tegelijk. In toekomstige versies kunnen we dit versoepelen om meerdere pagina's te ondersteunen. Als de extensie momenteel in de gesplitste modus wordt uitgevoerd met een actief incognitoprofiel, kunnen zowel het normale als het incognitoprofiel elk één document buiten het scherm hebben. Het is ook de bedoeling om de uitbreidingswerker op een later tijdstip DOM-functionaliteit te geven. U kunt uw extensies ‘toekomstbestendig’ maken door functies die de offscreen API gebruiken te koppelen aan een gelijkwaardige commentaarfunctie in de servicemedewerker, zodat u deze op een later tijdstip kunt omwisselen.

// Solution 1 - Service workers cannot directly interact with
// the system clipboard. To work around this, we'll create an offscreen
// document and pass the data we want to write to the clipboard.
async function addToClipboard(value) {
    await chrome.offscreen.createDocument({
      url: 'offscreen.html',
      reasons: [chrome.offscreen.Reason.CLIPBOARD],
      justification: 'Write text to the clipboard.',
    });
  }


// Solution 2 – Once extension service workers can use the Clipboard API,
// replace the offscreen document based implementation with something like this
async function addToClipboardV2(value) {
  navigator.clipboard.writeText(value);
}

Naarmate DOM-functionaliteit en API's aan de servicemedewerker worden toegevoegd, wordt bovendien de lijst met redenen om een ​​document te maken toegevoegd of ingekort, afhankelijk van de huidige status van de servicemedewerker en de redenen om offscreen-documenten te gebruiken.

Conclusie

Offscreen-documenten staan ​​extensies toe die DOM- of vensterinteractietoegang vereisen die momenteel niet kan worden bereikt door servicemedewerkers. Het biedt ook een flexibele aanpak, waarbij nieuwe use cases kunnen worden toegevoegd en in de toekomst opgeloste use cases kunnen worden verwijderd. Extensies moeten de voorgestelde offscreen document-API gebruiken voor specifieke gebruiksscenario's, en de primaire achtergrondcontext van de extensie moet de servicemedewerker blijven die in het manifest is gespecificeerd. Het offscreen-document mag niet de plaats zijn waar de primaire extensielogica wordt opgeslagen, omdat het beperkte API-toegang heeft. De levensduur van een document buiten het scherm is onafhankelijk van de servicemedewerker die het heeft gemaakt. Overwegingen over de levensduur van servicemedewerkers en gebruiksscenario's met betrekking tot de levensduur van servicemedewerkers in verlengingen worden behandeld in een aparte blogpost. De redenen om documenten buiten het scherm te gebruiken zullen in de loop van de tijd fluctueren naarmate functies en API's aan de servicemedewerker zelf worden toegevoegd. We zijn benieuwd naar de feedback van ontwikkelaars naarmate dit zich ontvouwt.

Foto door Kari Shea op Unsplash