Beschrijving
De chrome.debugger API dient als alternatief transport voor het protocol voor externe foutopsporing van Chrome. Gebruik chrome.debugger om aan een of meer tabbladen te koppelen om onder andere netwerkinteractie te instrumenteren, JavaScript te debuggen en de DOM en CSS te muteren. Gebruik de property Debuggee tabId om tabbladen te targeten met sendCommand en gebeurtenissen te routeren op tabId vanuit onEvent-callbacks.
Rechten
debuggerJe moet het recht "debugger" definiëren in het manifest van je extensie om deze API te gebruiken.
{
"name": "My extension",
...
"permissions": [
"debugger",
],
...
}
Beperkingen voor bedrijfsbeleid
Op bedrijfsapparaten kunnen sommige beleidsregels voorkomen dat extensies de debugger koppelen via een alles-of-niets-model op het moment van koppelen
(browser.debugger.attach()):
- Hostbeperkingen: Als het bedrijfsbeleid
ExtensionSettingsgeblokkeerde hosts (runtime_blocked_hosts) instelt voor een extensie, wordtbrowser.debugger.attach()geblokkeerd op alle doelen met de foutmelding"Host access is restricted by policy."(zelfs als afzonderlijke oorsprongen inruntime_allowed_hostsstaan). - Beleid voor screenshots en DLP: Als het bedrijfsbeleid
DisableScreenshotshet maken van screenshots uitzet of als er regels voor gegevensverlies voorkomen (DLP) van toepassing zijn op het doel, misluktbrowser.debugger.attach()met de foutmelding"Screenshot capture is restricted by policy.".
Concepten en gebruik
Nadat je de browser.debugger API hebt gekoppeld, kun je opdrachten van het Chrome DevTools-protocol (CDP) naar een bepaald doel sturen. Een uitgebreide uitleg van het CDP valt buiten het bereik van deze documentatie. Ga naar de officiële CDP-documentatie voor meer informatie over het CDP.
Doelen
Doelen vertegenwoordigen iets dat wordt gedebugd. Dit kan een tabblad, een iframe of een worker zijn. Elk doel wordt geïdentificeerd door een UUID en heeft een bijbehorend type (zoals iframe, shared_worker en meer).
Binnen een doel kunnen er meerdere uitvoeringscontexten zijn, bijvoorbeeld: iframes van hetzelfde proces krijgen geen uniek doel, maar worden vertegenwoordigd als verschillende contexten die toegankelijk zijn vanuit één doel.
Beperkte domeinen
Om veiligheidsredenen biedt de browser.debugger-API geen toegang tot alle domeinen van het Chrome DevTools-protocol. De beschikbare domeinen zijn: Accessibility,
Audits, CacheStorage, Console,
CSS, Database, Debugger, DOM,
DOMDebugger, DOMSnapshot,
Emulation, Fetch, IO, Input,
Inspector, Log, Network, Overlay,
Page, Performance,
Runtime, Storage, Target, Tracing,
WebAudio en WebAuthn.
Werken met frames
Er is geen een-op-een-toewijzing van frames aan doelen. Binnen één tabblad kunnen meerdere frames van hetzelfde proces hetzelfde doel delen, maar een andere uitvoeringscontext gebruiken. Aan de andere kant kan er een nieuw doel worden gemaakt voor een out-of-process iframe.
Als je aan alle frames wilt koppelen, moet je elk type frame afzonderlijk verwerken:
Luister naar de gebeurtenis
Runtime.executionContextCreatedom nieuwe uitvoeringscontexten te identificeren die zijn gekoppeld aan dezelfde procesframes.Volg de stappen om te koppelen aan gerelateerde doelen om frames buiten het proces te identificeren.
Koppelen aan gerelateerde doelen
Nadat je verbinding hebt gemaakt met een doel, wil je misschien verbinding maken met andere gerelateerde doelen, waaronder onderliggende frames buiten het proces of bijbehorende workers.
Vanaf Chrome 125 ondersteunt de browser.debugger API platte sessies. Hiermee kun je extra doelen als onderliggende elementen toevoegen aan je hoofd-debuggersessie en ze berichten sturen zonder dat je nog een aanroep naar browser.debugger.attach nodig hebt. In plaats daarvan
kun je een sessionId-property toevoegen als je browser.debugger.sendCommand aanroept om
het onderliggende doel te identificeren waarnaar je een opdracht wilt sturen.
Als je automatisch wilt koppelen aan onderliggende frames buiten het proces, voeg je eerst een listener toe voor de gebeurtenis Target.attachedToTarget:
browser.debugger.onEvent.addListener((source, method, params) => {
if (method === "Target.attachedToTarget") {
// `source` identifies the parent session, but we need to construct a new
// identifier for the child session
const session = { ...source, sessionId: params.sessionId };
// Call any needed CDP commands for the child session
await browser.debugger.sendCommand(session, "Runtime.enable");
}
});
Zet daarna automatisch bijvoegen aan door de opdracht Target.setAutoAttach te sturen met de optie flatten ingesteld op true:
await browser.debugger.sendCommand({ tabId }, "Target.setAutoAttach", {
autoAttach: true,
waitForDebuggerOnStart: false,
flatten: true,
filter: [{ type: "iframe", exclude: false }]
});
Automatisch bijvoegen voegt alleen bij aan frames waarvan het doel op de hoogte is. Dit is beperkt tot frames die directe onderliggende elementen zijn van een frame dat eraan is gekoppeld. Bijvoorbeeld:
met de framehiërarchie A -> B -> C (waarbij alle cross-origin zijn), leidt het aanroepen van
Target.setAutoAttach voor het doel dat aan A is gekoppeld ertoe dat de
sessie ook aan B wordt gekoppeld. Dit is echter niet recursief, dus Target.setAutoAttach moet ook worden aangeroepen voor B om de sessie aan C te koppelen.
Voorbeelden
Als je deze API wilt proberen, installeer je het voorbeeld van de debugger-API uit de repository chrome-extension-samples.
Typen
Debuggee
ID van debuggee. tabId, extensionId of targetId moet worden ingevoerd
Eigenschappen
-
extensionId
tekenreeks optioneel
De ID van de extensie die je wilt debuggen. Koppelen aan een achtergrondpagina van een extensie is alleen mogelijk als de opdrachtregeloptie
--silent-debugger-extension-apiwordt gebruikt. -
tabId
number optioneel
De ID van het tabblad dat je wilt debuggen.
-
targetId
tekenreeks optioneel
De ondoorzichtige ID van het foutopsporingsdoel.
DebuggerSession
ID van de foutopsporingssessie. Er moet een tabId, extensionId of targetId worden ingevoerd. Daarnaast kan een optionele sessionId worden verstrekt. Als sessionId is ingevoerd voor argumenten die worden gestuurd vanuit onEvent, betekent dit dat de gebeurtenis afkomstig is van een onderliggende protocolsessie binnen de root-debuggee-sessie. Als sessionId wordt gespecificeerd wanneer deze wordt doorgegeven aan sendCommand, is deze gericht op een onderliggende protocolsessie binnen de root-debuggee-sessie.
Eigenschappen
-
extensionId
tekenreeks optioneel
De ID van de extensie die je wilt debuggen. Koppelen aan een achtergrondpagina van een extensie is alleen mogelijk als de opdrachtregeloptie
--silent-debugger-extension-apiwordt gebruikt. -
sessionId
tekenreeks optioneel
De ondoorzichtige ID van de sessie van het Chrome DevTools-protocol. Identificeert een onderliggende sessie binnen de hoofdsessie die wordt geïdentificeerd door tabId, extensionId of targetId.
-
tabId
number optioneel
De ID van het tabblad dat je wilt debuggen.
-
targetId
tekenreeks optioneel
De ondoorzichtige ID van het foutopsporingsdoel.
DetachReason
Reden voor beëindiging van de verbinding.
Enum
"target_closed"
"canceled_by_user"
TargetInfo
Informatie over foutopsporingsdoel
Eigenschappen
-
gekoppeld
booleaans
True als de debugger al is gekoppeld.
-
extensionId
tekenreeks optioneel
De extensie-ID, gedefinieerd als type = 'background_page'.
-
faviconUrl
tekenreeks optioneel
Doelfavicon-URL.
-
id
tekenreeks
Doel-ID.
-
tabId
number optioneel
De tabblad-ID, gedefinieerd als type == 'page'.
-
titel
tekenreeks
Titel van doelpagina.
-
type
Doeltype.
-
url
tekenreeks
Doel-URL.
TargetInfoType
Doeltype.
Enum
"page"
"background_page"
"worker"
"other"
Methoden
attach()
browser.debugger.attach(
target: Debuggee,
requiredVersion: string,
): Promise<void>
Koppelt de debugger aan het opgegeven doel.
Parameters
-
target
Het foutopsporingsdoel waaraan je wilt koppelen.
-
requiredVersion
tekenreeks
Vereiste versie van foutopsporingsprotocol (0.1). Je kunt alleen koppelen aan de debuggee met een overeenkomende hoofdversie en een grotere of gelijke onderversie. Hier vindt u een lijst met de protocolversies.
Retourzendingen
-
Promise<void>
Chrome 96+ browser.* sinds Chrome 148Wordt opgelost zodra de koppelingsbewerking is geslaagd of mislukt. De belofte wordt omgezet zonder waarde. Als de koppeling mislukt, wordt de promise afgewezen.
detach()
browser.debugger.detach(
target: Debuggee,
): Promise<void>
Maakt de debugger los van het opgegeven doel.
Parameters
-
target
Het foutopsporingsdoel waarvan je de koppeling wilt verwijderen.
Retourzendingen
-
Promise<void>
Chrome 96+ browser.* sinds Chrome 148Wordt opgelost zodra de ontkoppelingsbewerking is geslaagd of mislukt. De belofte wordt omgezet zonder waarde. Als het loskoppelen mislukt, wordt de promise afgewezen.
getTargets()
browser.debugger.getTargets(): Promise<TargetInfo[]>
Retourneert de lijst met beschikbare foutopsporingsdoelen.
Retourzendingen
-
Promise<TargetInfo[]>
Chrome 96+ browser.* sinds Chrome 148
sendCommand()
browser.debugger.sendCommand(
target: DebuggerSession,
method: string,
commandParams?: object,
): Promise<object | undefined>
Stuurt de gegeven opdracht naar het foutopsporingsdoel.
Parameters
-
target
Het foutopsporingsdoel waarnaar je de opdracht wilt sturen.
-
method
tekenreeks
Methodenaam. Moet een van de methoden zijn die zijn gedefinieerd door het protocol voor foutopsporing op afstand.
-
commandParams
object optioneel
Json-object met verzoekparameters. Dit object moet voldoen aan het schema voor parameters voor foutopsporing op afstand voor de gegeven methode.
Retourzendingen
-
Promise<object | undefined>
Chrome 96+ browser.* sinds Chrome 148Tekstgedeelte van reactie. Als er een fout optreedt bij het posten van het bericht, wordt de promise afgewezen.
Evenementen
onDetach
browser.debugger.onDetach.addListener(
callback: function,
)
Wordt geactiveerd als de browser de foutopsporingssessie voor het tabblad beëindigt. Dit gebeurt als het tabblad wordt gesloten of als Chrome DevTools wordt aangeroepen voor het bijgevoegde tabblad.
Parameters
-
callback
functie
De parameter
callbackziet er zo uit:(source: Debuggee, reason: DetachReason) => void
-
source
-
reden
-
onEvent
browser.debugger.onEvent.addListener(
callback: function,
)
Wordt geactiveerd wanneer het foutopsporingsdoel een instrumentatiegebeurtenis uitvoert.
Parameters
-
callback
functie
De parameter
callbackziet er zo uit:(source: DebuggerSession, method: string, params?: object) => void
-
source
-
method
tekenreeks
-
parameters
object optioneel
-