chrome.debugger

설명

chrome.debugger API는 Chrome의 원격 디버깅 프로토콜 대체 전송 역할을 합니다. chrome.debugger를 사용하여 하나 이상의 탭에 연결하여 네트워크 상호작용을 계측하고 JavaScript를 디버그하며 DOM 및 CSS를 변경하는 등의 작업을 수행합니다. Debuggee tabId를 사용하여 sendCommand로 탭을 타겟팅하고 onEvent 콜백에서 tabId에 의해 이벤트를 라우팅합니다.

권한

debugger

이 API를 사용하려면 확장 프로그램의 매니페스트에서 "debugger" 권한을 선언해야 합니다.

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

개념 및 사용법

연결되면 chrome.debugger API를 사용하여 Chrome DevTools 프로토콜(CDP) 명령어를 지정된 대상으로 보낼 수 있습니다. CDP에 대한 자세한 설명은 이 문서의 범위를 벗어납니다. CDP에 대한 자세한 내용은 공식 CDP 문서를 참조하세요.

대상

타겟은 디버그 중인 대상을 나타내며 여기에는 탭, iframe 또는 작업자가 포함될 수 있습니다. 각 대상은 UUID로 식별되며 연결된 유형 (예: iframe, shared_worker 등)이 있습니다.

타겟 내에는 여러 실행 컨텍스트가 있을 수 있습니다. 예를 들어 동일한 프로세스 iframe은 고유한 타겟을 가져오지 않고 단일 타겟에서 액세스할 수 있는 여러 컨텍스트로 표현됩니다.

제한된 도메인

보안상의 이유로 chrome.debugger API는 모든 Chrome DevTools 프로토콜 도메인에 대한 액세스를 제공하지 않습니다. 사용 가능한 도메인은 다음과 같습니다. Accessibility, Audits, CacheStorage, Console, CSS, Debugger, DOM, DOMDebugger, DOMSnapshotWebAudioWebAuthn

프레임 사용

타겟에 대한 프레임의 일대일 매핑은 없습니다. 단일 탭 내에서 여러 개의 동일한 프로세스 프레임이 동일한 타겟을 공유하지만 서로 다른 실행 컨텍스트를 사용할 수 있습니다. 반면에 프로세스 외부 iframe을 위한 새 타겟이 생성될 수 있습니다.

모든 프레임에 연결하려면 각 프레임 유형을 개별적으로 처리해야 합니다.

  • Runtime.executionContextCreated 이벤트를 수신 대기하여 동일한 프로세스 프레임과 연결된 새로운 실행 컨텍스트를 식별합니다.

  • 관련 대상에 연결하는 단계를 따라 프로세스 외부 프레임을 식별합니다.

대상에 연결한 후에는 프로세스 외부 하위 프레임 또는 연결된 작업자를 비롯한 추가 관련 대상에 연결해야 할 수 있습니다.

Chrome 125부터 chrome.debugger API가 플랫 세션을 지원합니다. 이렇게 하면 기본 디버거 세션에 추가 타겟을 하위 요소로 추가하고 chrome.debugger.attach를 다시 호출하지 않고도 메시지를 보낼 수 있습니다. 대신 chrome.debugger.sendCommand를 호출할 때 sessionId 속성을 추가하여 명령어를 전송할 하위 타겟을 식별할 수 있습니다.

프로세스 외부 하위 프레임에 자동으로 연결하려면 먼저 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");
  }
});

그런 다음 flatten 옵션을 true로 설정하여 Target.setAutoAttach 명령어를 전송하여 자동 연결을 사용 설정합니다.

await chrome.debugger.sendCommand({ tabId }, "Target.setAutoAttach", {
  autoAttach: true,
  waitForDebuggerOnStart: false,
  flatten: true,
  filter: [{ type: "iframe", exclude: false }]
});

이 API를 사용해 보려면 chrome-extension-samples 저장소의 디버거 API 예시를 설치하세요.

유형

Debuggee

디버깅 대상 식별자입니다. tabId, 확장 ID 또는 targetId를 지정해야 합니다.

속성

  • extensionId

    문자열 선택사항

    디버그하려는 확장 프로그램의 ID입니다. 확장 프로그램 백그라운드 페이지에 연결하는 것은 --silent-debugger-extension-api 명령줄 스위치를 사용하는 경우에만 가능합니다.

  • tabId

    number 선택사항

    디버그하려는 탭의 ID입니다.

  • targetId

    문자열 선택사항

    디버그 타겟의 불투명 ID입니다.

DebuggerSession

Chrome 125 이상

디버거 세션 식별자입니다. tabId, 확장 ID 또는 targetId 중 하나를 지정해야 합니다. 선택사항인 sessionId를 제공할 수도 있습니다. onEvent에서 전송된 인수에 sessionId가 지정된 경우 이벤트가 루트 디버깅 대상 세션 내의 하위 프로토콜 세션에서 발생한 것임을 의미합니다. sessionId가 sendCommand에 전달될 때 지정되면 루트 디버깅 대상 세션 내에서 하위 프로토콜 세션을 타겟팅합니다.

속성

  • extensionId

    문자열 선택사항

    디버그하려는 확장 프로그램의 ID입니다. 확장 프로그램 백그라운드 페이지에 연결하는 것은 --silent-debugger-extension-api 명령줄 스위치를 사용하는 경우에만 가능합니다.

  • sessionId

    문자열 선택사항

    Chrome DevTools 프로토콜 세션의 불투명 ID입니다. tabId, ExtensionId 또는 targetId로 식별되는 루트 세션 내의 하위 세션을 식별합니다.

  • tabId

    number 선택사항

    디버그하려는 탭의 ID입니다.

  • targetId

    문자열 선택사항

    디버그 타겟의 불투명 ID입니다.

DetachReason

Chrome 44 이상

연결 종료 이유입니다.

enum

TargetInfo

디버그 대상 정보

속성

  • 연결됨

    boolean

    디버거가 이미 연결되어 있으면 true입니다.

  • extensionId

    문자열 선택사항

    확장 프로그램 ID로, 유형이 'background_page'인 경우에 정의됩니다.

  • faviconUrl

    문자열 선택사항

    파비콘 URL을 타겟팅합니다.

  • id

    문자열

    타겟 ID입니다.

  • tabId

    number 선택사항

    유형 == 'page'인 경우 정의되는 탭 ID입니다.

  • title

    문자열

    대상 페이지 제목입니다.

  • 대상 유형입니다.

  • url

    문자열

    타겟 URL입니다.

TargetInfoType

Chrome 44 이상

대상 유형입니다.

enum

"background_page"

메서드

attach()

프로미스
chrome.debugger.attach(
  target: Debuggee,
  requiredVersion: string,
  callback?: function,
)

디버거를 지정된 타겟에 연결합니다.

매개변수

  • 연결할 디버깅 대상입니다.

  • requiredVersion

    문자열

    필수 디버깅 프로토콜 버전 ('0.1') 일치하는 주 버전과 그 이상의 부 버전이 있는 디버깅 대상에만 연결할 수 있습니다. 프로토콜 버전 목록은 여기에서 확인할 수 있습니다.

  • callback

    함수 선택사항

    callback 매개변수는 다음과 같습니다.

    ()=>void

반환 값

  • Promise<void>

    Chrome 96 이상

    프로미스는 Manifest V3 이상에서 지원되지만 콜백은 이전 버전과의 호환성을 위해 제공됩니다. 동일한 함수 호출에 둘 다 사용할 수는 없습니다. 프로미스는 콜백에 전달된 것과 동일한 유형으로 확인됩니다.

detach()

프로미스
chrome.debugger.detach(
  target: Debuggee,
  callback?: function,
)

지정된 타겟에서 디버거를 분리합니다.

매개변수

  • 분리하려는 디버깅 대상입니다.

  • callback

    함수 선택사항

    callback 매개변수는 다음과 같습니다.

    ()=>void

반환 값

  • Promise<void>

    Chrome 96 이상

    프로미스는 Manifest V3 이상에서 지원되지만 콜백은 이전 버전과의 호환성을 위해 제공됩니다. 동일한 함수 호출에 둘 다 사용할 수는 없습니다. 프로미스는 콜백에 전달된 것과 동일한 유형으로 확인됩니다.

getTargets()

프로미스
chrome.debugger.getTargets(
  callback?: function,
)

사용 가능한 디버그 대상 목록을 반환합니다.

매개변수

  • callback

    함수 선택사항

    callback 매개변수는 다음과 같습니다.

    (result: TargetInfo[])=>void

    • 결과

      사용 가능한 디버그 대상에 해당하는 TargetInfo 객체의 배열입니다.

반환 값

  • Promise<TargetInfo[]>

    Chrome 96 이상

    프로미스는 Manifest V3 이상에서 지원되지만 콜백은 이전 버전과의 호환성을 위해 제공됩니다. 동일한 함수 호출에 둘 다 사용할 수는 없습니다. 프로미스는 콜백에 전달된 것과 동일한 유형으로 확인됩니다.

sendCommand()

프로미스
chrome.debugger.sendCommand(
  target: DebuggerSession,
  method: string,
  commandParams?: object,
  callback?: function,
)

지정된 명령어를 디버깅 대상으로 전송합니다.

매개변수

  • 명령어를 전송할 디버깅 대상입니다.

  • method

    문자열

    메서드 이름입니다. 원격 디버깅 프로토콜에 의해 정의된 메서드 중 하나여야 합니다.

  • commandParams

    객체 선택사항

    요청 매개변수가 있는 JSON 객체입니다. 이 객체는 지정된 메서드의 원격 디버깅 매개변수 스키마를 준수해야 합니다.

  • callback

    함수 선택사항

    callback 매개변수는 다음과 같습니다.

    (result?: object)=>void

    • 결과

      객체 선택사항

      JSON 객체를 반환합니다. 응답의 구조는 메서드 이름에 따라 다르며 원격 디버깅 프로토콜에서 명령 설명의 'returns' 속성으로 정의됩니다.

반환 값

  • Promise<object|undefined>

    Chrome 96 이상

    프로미스는 Manifest V3 이상에서 지원되지만 콜백은 이전 버전과의 호환성을 위해 제공됩니다. 동일한 함수 호출에 둘 다 사용할 수는 없습니다. 프로미스는 콜백에 전달된 것과 동일한 유형으로 확인됩니다.

이벤트

onDetach

chrome.debugger.onDetach.addListener(
  callback: function,
)

브라우저가 탭의 디버깅 세션을 종료하면 실행됩니다. 이는 탭을 닫거나 연결된 탭에 대해 Chrome DevTools를 호출할 때 발생합니다.

매개변수

onEvent

chrome.debugger.onEvent.addListener(
  callback: function,
)

디버깅 타겟에서 계측 이벤트를 해결할 때마다 실행됩니다.

매개변수

  • callback

    기능

    callback 매개변수는 다음과 같습니다.

    (source: DebuggerSession,method: string,params?: object)=>void