Opis
Interfejs API chrome.debugger
służy jako alternatywny środek transportu dla protokołu zdalnego debugowania w Chrome. Przy użyciu elementu chrome.debugger
możesz dołączyć do co najmniej 1 karty w celu instrumentowania interakcji w sieci, debugowania JavaScriptu, zmieniania DOM i CSS oraz wykonywania innych działań. Użyj właściwości tabId
Debuggee
, aby kierować na karty z parametrem sendCommand
i kierować zdarzenia według parametru tabId
z onEvent
wywołań zwrotnych.
Uprawnienia
debugger
Aby korzystać z tego interfejsu API, musisz zadeklarować uprawnienia "debugger"
w pliku manifestu rozszerzenia.
{
"name": "My extension",
...
"permissions": [
"debugger",
],
...
}
Pojęcia i wykorzystanie
Po podłączeniu interfejs API chrome.debugger
umożliwia wysyłanie protokołu Narzędzi deweloperskich w Chrome
polecenia (CDP) do danego miejsca docelowego. Precyzyjne omówienie CDP nie mieści się w zakresie
tej dokumentacji. Aby dowiedzieć się więcej o CDP, zapoznaj się z
oficjalna dokumentacja CDP.
Cele
Cele reprezentują element, który jest właśnie debugowany. Może to być karta,
w elemencie iframe lub instancji roboczej. Każdy cel jest identyfikowany przez UUID i ma powiązany identyfikator
typ (na przykład iframe
, shared_worker
i inne).
W obrębie środowiska docelowego może być wiele kontekstów wykonania – na przykład ten sam elementów iframe procesu nie otrzymują unikalnej wartości docelowej, ale są reprezentowane jako różnych kontekstów, do których można uzyskać dostęp z jednego miejsca docelowego.
Domeny z ograniczeniami
Ze względów bezpieczeństwa interfejs API chrome.debugger
nie zapewnia dostępu do wszystkich Narzędzi deweloperskich w Chrome
Protocol Domains (Domeny protokołu). Dostępne domeny: Ułatwienia dostępu,
Kontrole, CacheStorage, Konsola,
CSS, baza danych, debuger, DOM,
DOMDebugger, DOMSnapshot
Emulacja, pobieranie, IO, dane wejściowe,
Inspektor, dziennik, sieć, nakładka,
Strona, Wydajność, Profiler,
Środowisko wykonawcze, Miejsce na dane, Miejsce docelowe, Śledzenie,
WebAudio i WebAuthn.
Praca z ramkami
Nie ma jednego mapowania klatek na elementy docelowe. Na jednej karcie wiele takich samych ramek procesu może mieć ten sam cel, ale używać innej kontekstu wykonania. Z drugiej strony nowy cel może być utworzony dla elementu iframe poza procesem.
Aby załączyć je do wszystkich ramek, musisz obchodzić się z każdym z nich oddzielnie:
Wykrywaj zdarzenie
Runtime.executionContextCreated
, aby zidentyfikować nowe kontekstach wykonania powiązanych z tymi samymi ramkami procesów.Postępuj zgodnie z instrukcjami, aby załączyć go do powiązanych celów, aby: identyfikować klatki poza procesem.
Dołącz do powiązanych celów
Po połączeniu z celem możesz utworzyć połączenie z dalszymi powiązanymi celami łącznie z ramkami podrzędnymi poza procesem lub powiązanymi instancjami roboczymi.
Od wersji Chrome 125 interfejs API chrome.debugger
obsługuje stałe sesje. Ten
umożliwia dodanie kolejnych celów jako elementów podrzędnych do głównej sesji debugowania.
możesz wysłać do tej osoby wiadomość bez potrzeby wykonywania kolejnego połączenia z numerem chrome.debugger.attach
. Zamiast tego:
możesz dodać właściwość sessionId
podczas wywoływania funkcji chrome.debugger.sendCommand
do
wskazać podrzędne środowisko docelowe, do którego chcesz wysłać polecenie.
Aby automatycznie dołączać pliki do nieprzetworzonych klatek podrzędnych, najpierw dodaj detektor
zdarzenie 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");
}
});
Następnie włącz automatyczne dołączanie, wysyłając polecenie Target.setAutoAttach
z
opcja flatten
ustawiona na true
:
await chrome.debugger.sendCommand({ tabId }, "Target.setAutoAttach", {
autoAttach: true,
waitForDebuggerOnStart: false,
flatten: true,
filter: [{ type: "iframe", exclude: false }]
});
Przykłady
Aby wypróbować ten interfejs API, zainstaluj przykładowy interfejs API debugowania ze strony chrome-extension-samples. z repozytorium.
Typy
Debuggee
Identyfikator debugowania. Musisz określić identyfikator tabId, identyfikator rozszerzenia lub identyfikator docelowy
Właściwości
-
extensionId
ciąg znaków opcjonalny
Identyfikator rozszerzenia, które chcesz debugować. Dołączenie do strony rozszerzenia w tle jest możliwe tylko wtedy, gdy jest używany przełącznik wiersza poleceń
--silent-debugger-extension-api
. -
tabId
liczba opcjonalnie
Identyfikator karty, którą chcesz debugować.
-
targetId
ciąg znaków opcjonalny
Nieczytelny identyfikator celu debugowania.
DebuggerSession
Identyfikator sesji debugera. Należy określić identyfikator tabId, identyfikator rozszerzenia lub identyfikator docelowy. Możesz też podać opcjonalny identyfikator sesji. Jeśli parametr sessionId jest określony w przypadku argumentów wysyłanych z metody onEvent
, oznacza to, że zdarzenie pochodzi z sesji protokołu podrzędnego w ramach sesji debugowania głównego. Jeśli parametr sessionId jest określony podczas przekazywania do sendCommand
, to kierowanie odbywa się na sesję protokołu podrzędnego w ramach sesji debugowania głównego.
Właściwości
-
extensionId
ciąg znaków opcjonalny
Identyfikator rozszerzenia, które chcesz debugować. Dołączenie do strony rozszerzenia w tle jest możliwe tylko wtedy, gdy jest używany przełącznik wiersza poleceń
--silent-debugger-extension-api
. -
sessionId
ciąg znaków opcjonalny
Nieprzezroczysty identyfikator sesji protokołu deweloperskiego w Chrome. Identyfikuje sesję podrzędną w ramach sesji głównej identyfikowanej za pomocą identyfikatora tabId, identyfikatora rozszerzenia lub identyfikatora docelowego.
-
tabId
liczba opcjonalnie
Identyfikator karty, którą chcesz debugować.
-
targetId
ciąg znaków opcjonalny
Nieczytelny identyfikator celu debugowania.
DetachReason
Przyczyna zakończenia połączenia.
Typ wyliczeniowy
"target_closed"
"canceled_by_user"
TargetInfo
Informacje o celu debugowania
Właściwości
-
podłączony
wartość logiczna
Wartość prawda, jeśli debuger jest już podłączony.
-
extensionId
ciąg znaków opcjonalny
Identyfikator rozszerzenia określony, jeśli typ = „background_page”.
-
faviconUrl
ciąg znaków opcjonalny
Docelowy adres URL favikony.
-
id
ciąg znaków
Identyfikator elementu docelowego.
-
tabId
liczba opcjonalnie
Identyfikator karty określony, jeśli typ == „strona”.
-
tytuł
ciąg znaków
Tytuł strony docelowej.
-
typ
Typ docelowy.
-
URL
ciąg znaków
Docelowy adres URL.
TargetInfoType
Typ docelowy.
Typ wyliczeniowy
"strona"
"background_page"
"worker"
"inna"
Metody
attach()
chrome.debugger.attach(
target: Debuggee,
requiredVersion: string,
callback?: function,
)
Podłącza debuger do danego miejsca docelowego.
Parametry
-
cel
Cel debugowania, do którego chcesz dołączyć.
-
requiredVersion
ciąg znaków
Wymagana wersja protokołu debugowania („0.1”). Do debugera można dołączyć tylko z pasującą wersją główną i wersją podrzędną większą lub równą. Listę wersji protokołów można znaleźć tutaj.
-
wywołanie zwrotne
funkcja optional
Parametr
callback
wygląda tak:() => void
Zwroty
-
Obietnica<void>
Chrome w wersji 96 lub nowszej, .Obietnice są obsługiwane w Manifest V3 i nowszych, ale wywołania zwrotne są podane w przypadku zgodność wsteczną. Nie można użyć obu w tym samym wywołaniu funkcji. Polecenie promowana jest realizowane z tym samym typem, który jest przekazywany do wywołania zwrotnego.
detach()
chrome.debugger.detach(
target: Debuggee,
callback?: function,
)
Odłącza debuger od podanego miejsca docelowego.
Parametry
-
cel
Cel debugowania, od którego chcesz się odłączyć.
-
wywołanie zwrotne
funkcja optional
Parametr
callback
wygląda tak:() => void
Zwroty
-
Obietnica<void>
Chrome w wersji 96 lub nowszej, .Obietnice są obsługiwane w Manifest V3 i nowszych, ale wywołania zwrotne są podane w przypadku zgodność wsteczną. Nie można użyć obu w tym samym wywołaniu funkcji. Polecenie promowana jest realizowane z tym samym typem, który jest przekazywany do wywołania zwrotnego.
getTargets()
chrome.debugger.getTargets(
callback?: function,
)
Zwraca listę dostępnych celów debugowania.
Parametry
-
wywołanie zwrotne
funkcja optional
Parametr
callback
wygląda tak:(result: TargetInfo[]) => void
-
wynik
Tablica obiektów TargetInfo odpowiadających dostępnym celom debugowania.
-
Zwroty
-
Promise<TargetInfo[]>
Chrome w wersji 96 lub nowszej, .Obietnice są obsługiwane w Manifest V3 i nowszych, ale wywołania zwrotne są podane w przypadku zgodność wsteczną. Nie można użyć obu w tym samym wywołaniu funkcji. Polecenie promowana jest realizowane z tym samym typem, który jest przekazywany do wywołania zwrotnego.
sendCommand()
chrome.debugger.sendCommand(
target: DebuggerSession,
method: string,
commandParams?: object,
callback?: function,
)
Wysyła podane polecenie do środowiska docelowego debugowania.
Parametry
-
cel
Cel debugowania, do którego chcesz wysłać polecenie.
-
method
ciąg znaków
Nazwa metody. Powinna być jedną z metod zdefiniowanych przez protokół zdalnego debugowania.
-
commandParams
obiekt opcjonalny
Obiekt JSON z parametrami żądania. Ten obiekt musi być zgodny ze schematem parametrów zdalnego debugowania dla danej metody.
-
wywołanie zwrotne
funkcja optional
Parametr
callback
wygląda tak:(result?: object) => void
-
wynik
obiekt opcjonalny
Obiekt JSON z odpowiedzią. Struktura odpowiedzi zależy od nazwy metody i jest zdefiniowana przez argumenty „returns” w polu opisu polecenia w protokole zdalnego debugowania.
-
Zwroty
-
Promise<object | niezdefiniowane>
Chrome w wersji 96 lub nowszej, .Obietnice są obsługiwane w Manifest V3 i nowszych, ale wywołania zwrotne są podane w przypadku zgodność wsteczną. Nie można użyć obu w tym samym wywołaniu funkcji. Polecenie promowana jest realizowane z tym samym typem, który jest przekazywany do wywołania zwrotnego.
Wydarzenia
onDetach
chrome.debugger.onDetach.addListener(
callback: function,
)
Uruchamiane, gdy przeglądarka zakończy sesję debugowania na karcie. Dzieje się tak, gdy zamykasz kartę lub wywołujesz Narzędzia deweloperskie w Chrome dla dołączonej karty.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
wygląda tak:(source: Debuggee, reason: DetachReason) => void
-
źródło
-
powód
-
onEvent
chrome.debugger.onEvent.addListener(
callback: function,
)
Uruchamiany za każdym razem, gdy debugowanie problemów docelowych jest zdarzeniem instrumentacji.
Parametry
-
wywołanie zwrotne
funkcja
Parametr
callback
wygląda tak:(source: DebuggerSession, method: string, params?: object) => void
-
źródło
-
method
ciąg znaków
-
parametry
obiekt opcjonalny
-