Beschrijving
De chrome.debugger API fungeert als alternatief transport voor het externe debugprotocol van Chrome. Gebruik chrome.debugger om verbinding te maken met een of meer tabbladen om netwerkinteractie te instrumenteren, JavaScript te debuggen, de DOM en CSS te muteren, en meer. Gebruik de eigenschap tabId Debuggee om tabbladen te targeten met sendCommand en gebeurtenissen te routeren via tabId vanuit onEvent callbacks.
Machtigingen
debugger U moet de machtiging "debugger" in het manifest van uw extensie declareren om deze API te gebruiken.
{
"name": "My extension",
...
"permissions": [
"debugger",
],
...
}
Begrippen en gebruik
Eenmaal gekoppeld, kunt u met de chrome.debugger API Chrome DevTools Protocol (CDP)-opdrachten naar een bepaald doel sturen. Een uitgebreide uitleg van CDP valt buiten het bestek van deze documentatie. Raadpleeg de officiële CDP-documentatie voor meer informatie over CDP.
Doelen
Targets vertegenwoordigen iets dat wordt gedebugd – dit kan een tabblad, een iframe of een worker zijn. Elk target wordt geïdentificeerd door een UUID en heeft een bijbehorend type (zoals iframe , shared_worker , enzovoort).
Binnen een doel kunnen er meerdere uitvoeringscontexten zijn. Zo krijgen dezelfde proces-iframes geen uniek doel, maar worden ze weergegeven als verschillende contexten die toegankelijk zijn vanaf één doel.
Beperkte domeinen
Om veiligheidsredenen biedt de chrome.debugger API geen toegang tot alle Chrome DevTools Protocol-domeinen. De beschikbare domeinen zijn: Accessibility , Audits , CacheStorage , Console , CSS , Database , Debugger , DOM , DOMDebugger , DOMSnapshot , Emulation , Fetch , IO , Input , Inspector , Log , Network , Overlay , Page , Performance , Profiler , Runtime , Storage , Target , Tracing , WebAudio en WebAuthn .
Werken met frames
Er is geen één-op-één-koppeling van frames aan targets. Binnen één tabblad kunnen meerdere frames van hetzelfde proces hetzelfde target delen, maar een andere uitvoeringscontext gebruiken. Aan de andere kant kan er een nieuw target worden aangemaakt voor een out-of-process iframe.
Om aan alle frames te kunnen bevestigen, moet u elk type frame apart behandelen:
Luister naar de gebeurtenis
Runtime.executionContextCreatedom nieuwe uitvoeringscontexten te identificeren die aan dezelfde procesframes zijn gekoppeld.Volg de stappen om aan gerelateerde doelen te koppelen om out-of-proces frames te identificeren.
Koppelen aan gerelateerde doelen
Nadat u verbinding hebt gemaakt met een doel, wilt u mogelijk verbinding maken met gerelateerde doelen, zoals out-of-process-subframes of bijbehorende workers.
Vanaf Chrome 125 ondersteunt de chrome.debugger API platte sessies. Hiermee kunt u extra targets als onderliggende targets aan uw hoofddebuggersessie toevoegen en deze een bericht sturen zonder dat u chrome.debugger.attach opnieuw hoeft aan te roepen. In plaats daarvan kunt u een sessionId -eigenschap toevoegen wanneer u chrome.debugger.sendCommand aanroept om de onderliggende target te identificeren waarnaar u een opdracht wilt verzenden.
Om automatisch aan onderliggende frames buiten het proces te koppelen, voegt u eerst een listener toe voor de gebeurtenis Target.attachedToTarget :
chrome.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 chrome.debugger.sendCommand(session, "Runtime.enable");
}
});
Schakel vervolgens automatisch koppelen in door de opdracht Target.setAutoAttach te verzenden met de optie flatten ingesteld op true :
await chrome.debugger.sendCommand({ tabId }, "Target.setAutoAttach", {
autoAttach: true,
waitForDebuggerOnStart: false,
flatten: true,
filter: [{ type: "iframe", exclude: false }]
});
Auto-attach koppelt alleen aan frames waarvan het doel op de hoogte is, en is beperkt tot frames die directe onderliggende frames zijn van een frame dat eraan gekoppeld is. Bijvoorbeeld, met de framehiërarchie A -> B -> C (waarbij alle frames cross-origin zijn), zou het aanroepen van Target.setAutoAttach voor het doel dat aan A gekoppeld is, ertoe leiden dat de sessie ook aan B gekoppeld wordt. Dit is echter niet recursief, dus moet Target.setAutoAttach ook aangeroepen worden zodat B de sessie aan C kan koppelen.
Voorbeelden
Om deze API uit te proberen, installeert u het debugger API-voorbeeld uit de chrome-extension-samples repository.
Typen
Debuggee
Debuggee-ID. TabId, extensionId of targetId moet worden opgegeven.
Eigenschappen
- extensie-ID
string optioneel
De id van de extensie die u wilt debuggen. Koppelen aan een extensie-achtergrondpagina is alleen mogelijk met de opdrachtregeloptie
--silent-debugger-extension-api. - tabbladId
nummer optioneel
De id van het tabblad dat u wilt debuggen.
- doel-ID
string optioneel
De ondoorzichtige id van het debugdoel.
DebuggerSession
Sessie-ID voor debugger. TabId, extensionId of targetId moet worden opgegeven. Daarnaast kan optioneel een sessionId worden opgegeven. Als sessionId wordt opgegeven voor argumenten die vanuit onEvent worden verzonden, betekent dit dat de gebeurtenis afkomstig is van een onderliggende protocolsessie binnen de root debuggee-sessie. Als sessionId wordt opgegeven bij het doorgeven aan sendCommand , wordt een onderliggende protocolsessie binnen de root debuggee-sessie als doel gebruikt.
Eigenschappen
- extensie-ID
string optioneel
De id van de extensie die u wilt debuggen. Koppelen aan een extensie-achtergrondpagina is alleen mogelijk met de opdrachtregeloptie
--silent-debugger-extension-api. - sessie-ID
string optioneel
De ondoorzichtige id van de Chrome DevTools Protocol-sessie. Identificeert een onderliggende sessie binnen de rootsessie, geïdentificeerd door tabId, extensionId of targetId.
- tabbladId
nummer optioneel
De id van het tabblad dat u wilt debuggen.
- doel-ID
string optioneel
De ondoorzichtige id van het debugdoel.
DetachReason
Reden voor beëindiging van de verbinding.
Enum
"doel_gesloten" "geannuleerd_door_gebruiker"
TargetInfo
Debugdoelinformatie
Eigenschappen
- bijgevoegd
Booleaanse
True als de debugger al is gekoppeld.
- extensie-ID
string optioneel
De extensie-id, gedefinieerd als type = 'background_page'.
- faviconUrl
string optioneel
Doel favicon-URL.
- id
snaar
Doel-id.
- tabbladId
nummer optioneel
Het tabblad-id, gedefinieerd als type == 'pagina'.
- titel
snaar
Doelpaginatitel.
- type
Doeltype.
- url
snaar
Doel-URL.
TargetInfoType
Doeltype.
Enum
"pagina" "achtergrondpagina" "werker" "ander"
Methoden
attach()
chrome.debugger.attach(
target: Debuggee,
requiredVersion: string,
): Promise<void>
Koppelt de debugger aan het opgegeven doel.
Parameters
- doel
Foutopsporingsdoel waaraan u wilt koppelen.
- vereiste versie
snaar
Vereiste debugprotocolversie ("0.1"). Alleen een koppeling met de debuggee is mogelijk met een overeenkomende hoofdversie en een hogere of gelijke subversie. Een lijst met protocolversies is hier te vinden.
Retourneren
Belofte<leegte>
Chroom 96+
detach()
chrome.debugger.detach(
target: Debuggee,
): Promise<void>
Koppelt de debugger los van het opgegeven doel.
Parameters
- doel
Debugdoel waarvan u wilt loskoppelen.
Retourneren
Belofte<leegte>
Chroom 96+
getTargets()
chrome.debugger.getTargets(): Promise<TargetInfo[]>
Retourneert de lijst met beschikbare foutopsporingsdoelen.
Retourneren
Belofte< TargetInfo []>
Chroom 96+
sendCommand()
chrome.debugger.sendCommand(
target: DebuggerSession,
method: string,
commandParams?: object,
): Promise<object | undefined>
Stuurt de opgegeven opdracht naar het foutopsporingsdoel.
Parameters
- doel
Het foutopsporingsdoel waarnaar u de opdracht wilt verzenden.
- methode
snaar
Methodenaam. Moet een van de methoden zijn die gedefinieerd zijn door het protocol voor externe foutopsporing .
- commandParams
object optioneel
JSON-object met aanvraagparameters. Dit object moet voldoen aan het parameterschema voor externe foutopsporing voor de opgegeven methode.
Retourneren
Belofte<object | undefined>
Chroom 96+
Evenementen
onDetach
chrome.debugger.onDetach.addListener(
callback: function,
)
Wordt geactiveerd wanneer de browser de foutopsporingssessie voor het tabblad beëindigt. Dit gebeurt wanneer het tabblad wordt gesloten of Chrome DevTools wordt aangeroepen voor het gekoppelde tabblad.
Parameters
- terugbellen
functie
De
callbackziet er als volgt uit:(source: Debuggee, reason: DetachReason) => void
- bron
- reden
onEvent
chrome.debugger.onEvent.addListener(
callback: function,
)
Wordt geactiveerd wanneer het debugdoel een instrumentatiegebeurtenis veroorzaakt.
Parameters
- terugbellen
functie
De
callbackziet er als volgt uit:(source: DebuggerSession, method: string, params?: object) => void
- bron
- methode
snaar
- parameters
object optioneel