browser.debugger

Açıklama

chrome.debugger API, Chrome'un uzaktan hata ayıklama protokolü için alternatif bir aktarım görevi görür. Ağ etkileşimini ölçmek, JavaScript'te hata ayıklamak, DOM ve CSS'yi değiştirmek ve daha fazlası için bir veya daha fazla sekmeye eklemek üzere chrome.debugger kullanın. sendCommand ile sekmeleri hedeflemek ve onEvent geri çağırmalarından tabId ile etkinlikleri yönlendirmek için Debuggee özelliğini tabId kullanın.

İzinler

debugger

Bu API'yi kullanmak için uzantınızın manifest dosyasında "debugger" iznini beyan etmeniz gerekir.

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

Kurumsal politika kısıtlamaları

Kurumsal cihazlarda bazı politikalar, ekleme sırasında "ya hep ya hiç" modelini kullanarak uzantıların hata ayıklayıcıyı eklemesini kısıtlayabilir (browser.debugger.attach()):

  • Ana makine kısıtlamaları: Kurumsal politika ExtensionSettings bir uzantı için engellenen ana makineleri (runtime_blocked_hosts) yapılandırırsa browser.debugger.attach(), "Host access is restricted by policy." hatasıyla tüm hedeflerde engellenir (ayrı kaynaklar runtime_allowed_hosts içinde olsa bile).
  • Ekran görüntüsü ve Veri Kaybını Önleme politikaları: Kurumsal politika DisableScreenshots ekran görüntüsü almayı devre dışı bırakırsa veya Veri Kaybını Önleme (DLP) kuralları hedefe uygulanırsa browser.debugger.attach(), "Screenshot capture is restricted by policy." hatasıyla başarısız olur.

Kavramlar ve kullanım

Eklendikten sonra browser.debugger API'si, belirli bir hedefe Chrome Geliştirici Araçları Protokolü (CDP) komutları göndermenize olanak tanır. CDP'yi ayrıntılı olarak açıklamak bu dokümanın kapsamı dışındadır. CDP hakkında daha fazla bilgi edinmek için resmi CDP dokümanlarına göz atın.

Hedefler

Hedefler, hata ayıklanan bir öğeyi temsil eder. Bu öğe bir sekme, iframe veya çalışan olabilir. Her hedef bir UUID ile tanımlanır ve ilişkili bir türü (ör. iframe, shared_worker ve daha fazlası) vardır.

Bir hedefte birden fazla yürütme bağlamı olabilir. Örneğin, aynı işlem iframe'leri benzersiz bir hedef almaz, bunun yerine tek bir hedeften erişilebilen farklı bağlamlar olarak temsil edilir.

Kısıtlanmış alanlar

Güvenlik nedeniyle browser.debugger API, tüm Chrome Geliştirici Araçları Protokolü alanlarına erişim sağlamaz. Kullanılabilir alanlar şunlardır: 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 ve WebAuthn.

Çerçevelerle çalışma

Kareler ile hedefler arasında bire bir eşleme yoktur. Tek bir sekmede, aynı işlem çerçevelerinden birden fazlası aynı hedefi paylaşabilir ancak farklı bir yürütme bağlamı kullanabilir. Öte yandan, işlem dışı bir iframe için yeni bir hedef oluşturulabilir.

Tüm çerçevelere eklemek için her çerçeve türünü ayrı ayrı işlemeniz gerekir:

  • Aynı işlem çerçeveleriyle ilişkili yeni yürütme bağlamlarını belirlemek için Runtime.executionContextCreated etkinliğini dinleyin.

  • İşlem dışı çerçeveleri tanımlamak için ilgili hedeflere ekleme adımlarını uygulayın.

Bir hedefe bağlandıktan sonra, işlem dışı alt çerçeveler veya ilişkili çalışanlar dahil olmak üzere ilgili diğer hedeflere bağlanmak isteyebilirsiniz.

Chrome 125'ten itibaren browser.debugger API, düz oturumları destekler. Bu sayede, ana hata ayıklayıcı oturumunuza alt öğe olarak ek hedefler ekleyebilir ve browser.debugger.attach için başka bir çağrıya gerek kalmadan bu hedeflere mesaj gönderebilirsiniz. Bunun yerine, komut göndermek istediğiniz alt hedefi tanımlamak için browser.debugger.sendCommand yöntemini çağırırken bir sessionId özelliği ekleyebilirsiniz.

İşlem dışı alt çerçevelere otomatik olarak eklemek için önce Target.attachedToTarget etkinliği için bir dinleyici ekleyin:

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");
  }
});

Ardından, flatten seçeneği true olarak ayarlanmış şekilde Target.setAutoAttach komutunu göndererek otomatik ekleme özelliğini etkinleştirin:

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

Otomatik ekleme, yalnızca hedefin bildiği çerçevelere eklenir. Bu çerçeveler, hedefle ilişkili bir çerçevenin doğrudan alt öğeleri olan çerçevelerle sınırlıdır. Örneğin, A -> B -> C çerçeve hiyerarşisinde (tümü çapraz kaynaklıdır) A ile ilişkili hedef için Target.setAutoAttach çağrıldığında oturum B'ye de eklenir. Ancak bu işlem yinelemeli değildir. Bu nedenle, B'nin oturumu C'ye eklemesi için Target.setAutoAttach yönteminin de çağrılması gerekir.

Örnekler

Bu API'yi denemek için chrome-extension-samples deposundan hata ayıklayıcı API örneğini yükleyin.

Türler

Debuggee

Hata ayıklananın tanımlayıcısı. tabId, extensionId veya targetId belirtilmelidir

Özellikler

  • extensionId

    string isteğe bağlı

    Hata ayıklamak istediğiniz uzantının kimliği. Uzantı arka plan sayfasına ekleme işlemi yalnızca --silent-debugger-extension-api komut satırı anahtarı kullanıldığında mümkündür.

  • tabId

    number isteğe bağlı

    Hata ayıklamak istediğiniz sekmenin kimliği.

  • targetId

    string isteğe bağlı

    Hata ayıklama hedefinin opak kimliği.

DebuggerSession

Chrome 125 ve sonraki sürümler Chrome 148'den itibaren browser.*

Hata ayıklayıcı oturum tanımlayıcısı. tabId, extensionId veya targetId'den biri belirtilmelidir. Ayrıca, isteğe bağlı bir sessionId sağlanabilir. onEvent tarafından gönderilen bağımsız değişkenler için sessionId belirtilmişse etkinlik, kök hata ayıklanan oturumundaki bir alt protokol oturumundan geliyor demektir. sessionId, sendCommand yöntemine iletilirken belirtilirse kök hata ayıklama oturumundaki bir alt protokol oturumunu hedefler.

Özellikler

  • extensionId

    string isteğe bağlı

    Hata ayıklamak istediğiniz uzantının kimliği. Uzantı arka plan sayfasına ekleme işlemi yalnızca --silent-debugger-extension-api komut satırı anahtarı kullanıldığında mümkündür.

  • sessionId

    string isteğe bağlı

    Chrome Geliştirici Araçları Protokolü oturumunun opak kimliği. tabId, extensionId veya targetId ile tanımlanan kök oturumdaki bir alt oturumu tanımlar.

  • tabId

    number isteğe bağlı

    Hata ayıklamak istediğiniz sekmenin kimliği.

  • targetId

    string isteğe bağlı

    Hata ayıklama hedefinin opak kimliği.

DetachReason

Chrome 44 ve sonraki sürümler Chrome 148'den itibaren browser.*

Bağlantının sonlandırılma nedeni.

Enum

"target_closed"

"canceled_by_user"

TargetInfo

Hata ayıklama hedefi bilgileri

Özellikler

  • ekli

    boole

    Hata ayıklayıcı zaten ekliyse True değerini döndürür.

  • extensionId

    string isteğe bağlı

    Uzantı kimliği, type = 'background_page' ise tanımlanır.

  • faviconUrl

    string isteğe bağlı

    Hedef site simgesi URL'si.

  • id

    dize

    Hedef kimliği.

  • tabId

    number isteğe bağlı

    type == 'page' ise tanımlanan sekme kimliği.

  • title

    dize

    Hedef sayfa başlığı.

  • Hedef türü.

  • url

    dize

    Hedef URL.

TargetInfoType

Chrome 44 ve sonraki sürümler Chrome 148'den itibaren browser.*

Hedef türü.

Enum

"page"

"background_page"

"worker"

"diğer"

Yöntemler

attach()

browser.debugger.attach(
  target: Debuggee,
  requiredVersion: string,
)
: Promise<void>

Hata ayıklayıcıyı belirtilen hedefe ekler.

Parametreler

  • Eklemek istediğiniz hata ayıklama hedefi.

  • requiredVersion

    dize

    Gerekli hata ayıklama protokolü sürümü ("0.1"). Yalnızca eşleşen ana sürüme ve daha büyük veya eşit alt sürüme sahip hata ayıklanan uygulamaya bağlanılabilir. Protokol sürümlerinin listesine buradan ulaşabilirsiniz.

İadeler

  • Promise<void>

    Chrome 96 ve sonraki sürümler Chrome 148'den itibaren browser.*

    Ekleme işlemi başarılı veya başarısız olduğunda çözümlenir. Promise, değer olmadan çözümlenir. Ekleme işlemi başarısız olursa promise reddedilir.

detach()

browser.debugger.detach(
  target: Debuggee,
)
: Promise<void>

Hata ayıklayıcıyı belirtilen hedeften ayırır.

Parametreler

  • Bağlantısını kesmek istediğiniz hata ayıklama hedefi.

İadeler

  • Promise<void>

    Chrome 96 ve sonraki sürümler Chrome 148'den itibaren browser.*

    Ayırma işlemi başarılı veya başarısız olduğunda çözümlenir. Promise, değer olmadan çözümlenir. Ayırma işlemi başarısız olursa promise reddedilir.

getTargets()

browser.debugger.getTargets(): Promise<TargetInfo[]>

Kullanılabilir hata ayıklama hedeflerinin listesini döndürür.

İadeler

  • Promise<TargetInfo[]>

    Chrome 96 ve sonraki sürümler Chrome 148'den itibaren browser.*

sendCommand()

browser.debugger.sendCommand(
  target: DebuggerSession,
  method: string,
  commandParams?: object,
)
: Promise<object | undefined>

Verilen komutu hata ayıklama hedefine gönderir.

Parametreler

  • Komutu göndermek istediğiniz hata ayıklama hedefi.

  • method

    dize

    Yöntem adı. Uzaktan hata ayıklama protokolü tarafından tanımlanan yöntemlerden biri olmalıdır.

  • commandParams

    isteğe bağlı nesne

    İstek parametrelerini içeren JSON nesnesi. Bu nesne, belirli bir yöntem için uzaktan hata ayıklama parametreleri şemasına uygun olmalıdır.

İadeler

  • Promise<object | undefined>

    Chrome 96 ve sonraki sürümler Chrome 148'den itibaren browser.*

    Yanıt gövdesi. Mesaj yayınlanırken bir hata oluşursa promise reddedilir.

Etkinlikler

onDetach

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

Tarayıcı, sekme için hata ayıklama oturumunu sonlandırdığında tetiklenir. Bu durum, sekme kapatılırken veya ekli sekme için Chrome Geliştirici Araçları çağrılırken meydana gelir.

Parametreler

onEvent

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

Hata ayıklama hedefi, araç etkinliği yayınladığında tetiklenir.

Parametreler

  • callback

    işlev

    callback parametresi şu şekilde görünür:

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