chrome.offscreen

Beschrijving

Gebruik de offscreen API om offscreen-documenten te maken en beheren.

Machtigingen

offscreen

Om de Offscreen API te gebruiken, declareert u de machtiging "offscreen" in het extensiemanifest . Bijvoorbeeld:

{   "name": "My extension",   ...   "permissions": [     "offscreen"   ],   ... } 

Beschikbaarheid

Chroom 109+ MV3+

Begrippen en gebruik

Serviceworkers hebben geen DOM-toegang en veel websites hanteren contentbeveiligingsbeleid dat de functionaliteit van contentscripts beperkt. Met de Offscreen API kan de extensie DOM API's in een verborgen document gebruiken zonder de gebruikerservaring te verstoren door nieuwe vensters of tabbladen te openen. De runtime API is de enige extensie-API die door offscreen-documenten wordt ondersteund.

Pagina's die als offscreen-documenten worden geladen, worden anders verwerkt dan andere typen extensiepagina's. De rechten van de extensie worden overgedragen naar offscreen-documenten, maar met beperkingen op de toegang tot de extensie-API. Omdat de chrome.runtime API bijvoorbeeld de enige extensie-API is die door offscreen-documenten wordt ondersteund, moet berichten worden verwerkt met behulp van leden van die API.

Hieronder staan andere manieren waarop offscreen-documenten zich anders gedragen dan normale pagina's:

  • De URL van een offscreen-document moet een statisch HTML-bestand zijn met de extensie .
  • Documenten buiten het scherm kunnen niet worden scherpgesteld.
  • Een offscreen-document is een instantie van window , maar de waarde van de opener -eigenschap is altijd null .
  • Hoewel een extensiepakket meerdere offscreen-documenten kan bevatten, kan een geïnstalleerde extensie er slechts één tegelijk geopend hebben. Als de extensie in de split-modus draait met een actief incognitoprofiel, kunnen het normale en incognitoprofiel elk één offscreen-document bevatten.

Gebruik chrome.offscreen.createDocument() en chrome.offscreen.closeDocument() om een offscreen-document te maken en te sluiten. createDocument() vereist de url van het document, een reden en een rechtvaardiging:

chrome.offscreen.createDocument({   url: 'off_screen.html',   reasons: ['CLIPBOARD'],   justification: 'reason for needing the document', }); 

Redenen

Zie het gedeelte Redenen voor een lijst met geldige redenen. Redenen worden ingesteld tijdens het maken van een document om de levensduur van het document te bepalen. De reden AUDIO_PLAYBACK zorgt ervoor dat het document na 30 seconden zonder audio wordt gesloten. Alle andere redenen stellen geen levensduurlimieten in.

Voorbeelden

De levenscyclus van een offscreen-document behouden

Het volgende voorbeeld laat zien hoe u ervoor kunt zorgen dat een offscreen-document bestaat. De functie setupOffscreenDocument() roept runtime.getContexts() aan om een bestaand offscreen-document te vinden, of maakt het document aan als het nog niet bestaat.

let creating; // A global promise to avoid concurrency issues async function setupOffscreenDocument(path) {   // Check all windows controlled by the service worker to see if one   // of them is the offscreen document with the given path   const offscreenUrl = chrome.runtime.getURL(path);   const existingContexts = await chrome.runtime.getContexts({     contextTypes: ['OFFSCREEN_DOCUMENT'],     documentUrls: [offscreenUrl]   });    if (existingContexts.length > 0) {     return;   }    // create offscreen document   if (creating) {     await creating;   } else {     creating = chrome.offscreen.createDocument({       url: path,       reasons: ['CLIPBOARD'],       justification: 'reason for needing the document',     });     await creating;     creating = null;   } } 

Voordat u een bericht naar een offscreen-document stuurt, roept u setupOffscreenDocument() aan om te controleren of het document bestaat, zoals in het volgende voorbeeld wordt gedemonstreerd.

chrome.action.onClicked.addListener(async () => {   await setupOffscreenDocument('off_screen.html');    // Send message to offscreen document   chrome.runtime.sendMessage({     type: '...',     target: 'offscreen',     data: '...'   }); }); 

Voor complete voorbeelden, zie de offscreen-clipboard en offscreen-dom demo's op GitHub.

Vóór Chrome 116: controleren of een offscreen-document geopend is

runtime.getContexts() is toegevoegd in Chrome 116. In eerdere versies van Chrome kunt u clients.matchAll() gebruiken om te controleren op een bestaand offscreen-document:

async function hasOffscreenDocument() {   if ('getContexts' in chrome.runtime) {     const contexts = await chrome.runtime.getContexts({       contextTypes: ['OFFSCREEN_DOCUMENT'],       documentUrls: [OFFSCREEN_DOCUMENT_PATH]     });     return Boolean(contexts.length);   } else {     const matchedClients = await clients.matchAll();     return matchedClients.some(client => {       return client.url.includes(chrome.runtime.id);     });   } } 

Typen

CreateParameters

Eigenschappen

  • rechtvaardiging

    snaar

    Een door de ontwikkelaar verstrekte tekenreeks die de noodzaak van de achtergrondcontext gedetailleerder uitlegt. De user agent mag deze gebruiken om aan de gebruiker te tonen.

  • redenen

    Reden []

    De reden(en) waarom de extensie het offscreen-document aanmaakt.

  • url

    snaar

    De (relatieve) URL die in het document moet worden geladen.

Reason

Enum

"TESTEN"
Een reden die alleen voor testdoeleinden wordt gebruikt.

"AUDIO_AFSPELEN"
Geeft aan dat het offscreen-document verantwoordelijk is voor het afspelen van audio.

"IFRAME_SCRIPTING"
Geeft aan dat het offscreen-document een iframe moet insluiten en scripten om de inhoud van het iframe te kunnen wijzigen.

"DOM_SCRAPING"
Geeft aan dat het offscreen-document een iframe moet insluiten en de DOM moet scrapen om informatie te extraheren.

"VLEKKEN"
Geeft aan dat het offscreen-document moet communiceren met Blob-objecten (inclusief URL.createObjectURL() ).

"DOM_PARSER"
Geeft aan dat het offscreen-document de DOMParser API moet gebruiken.

"GEBRUIKERSMEDIA"
Geeft aan dat het offscreen-document moet communiceren met mediastreams van gebruikersmedia (bijv. getUserMedia() ).

"DISPLAY_MEDIA"
Geeft aan dat het offscreen-document moet communiceren met mediastreams van weergavemedia (bijv. getDisplayMedia() ).

"WEB_RTC"
Geeft aan dat het offscreen-document WebRTC API's moet gebruiken.

"KLEMBORD"
Geeft aan dat het offscreen-document moet communiceren met de Klembord-API .

"LOKALE_OPSLAG"
Geeft aan dat het offscreen-document toegang nodig heeft tot localStorage .

"WERKERS"
Geeft aan dat het offscreen-document workers moet genereren.

"BATTERIJSTATUS"
Geeft aan dat het offscreen-document navigator.getBattery moet gebruiken.

"MATCH_MEDIA"
Geeft aan dat het offscreen-document window.matchMedia moet gebruiken.

"GEOLOCATIE"
Geeft aan dat het offscreen-document navigator.geolocation moet gebruiken.

Methoden

closeDocument()

chrome.offscreen.closeDocument(): Promise<void>

Sluit het momenteel geopende offscreen-document voor de extensie.

Retourneren

  • Belofte<leegte>

createDocument()

chrome.offscreen.createDocument(
  parameters: CreateParameters,
)
: Promise<void>

Maakt een nieuw offscreen-document voor de extensie.

Parameters

  • parameters

    De parameters die het offscreen-document beschrijven dat moet worden gemaakt.

Retourneren

  • Belofte<leegte>