browser.debugger

شرح

‫API chrome.debugger به‌عنوان انتقال جایگزین برای پروتکل اشکال‌زدایی از دور Chrome عمل می‌کند. از chrome.debugger برای پیوستن به یک یا چند برگه برای ابزاربندی تعامل شبکه، اشکال‌زدایی جاوا اسکریپت، جهش DOM و CSS، و غیره استفاده کنید. از دارایی Debuggee tabId برای هدف‌یابی برگه‌ها با sendCommand و مسیریابی رویدادها براساس tabId از onEvent پادзвоن استفاده کنید.

اجازه‌ها

debugger

برای استفاده از این «میانای برنامه‌سازی کاربردی»، باید اجازه "debugger" را در مانیفست افزونه‌تان اعلام کنید.

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

محدودیت‌های خط‌مشی سازمانی

در دستگاه‌های سازمانی، برخی‌از خط‌مشی‌ها می‌توانند افزونه‌ها را از پیوست کردن اشکال‌زدا بااستفاده از مدل همه‌یاهیچ در زمان پیوست کردن محدود کنند (browser.debugger.attach()):

  • محدودیت‌های میزبان: اگر خط‌مشی سازمانی ExtensionSettings میزبان‌های مسدودشده (runtime_blocked_hosts) را برای افزونه‌ای پیکربندی کند، browser.debugger.attach() در همه هدف‌ها با خطای "Host access is restricted by policy." مسدود می‌شود (حتی اگر مبدأهای فردی در runtime_allowed_hosts باشد).
  • خط‌مشی‌های «جلوگیری از ازدست رفتن داده‌ها» و نماگرفت: اگر خط‌مشی سازمانی DisableScreenshots ضبط نماگرفت را غیرفعال کند یا قوانین «جلوگیری از ازدست رفتن داده‌ها» (DLP) برای هدف اعمال شود، browser.debugger.attach() با خطای "Screenshot capture is restricted by policy." ناموفق خواهد بود.

مفاهیم و استفاده

پس‌از پیوست کردن، میانای برنامه‌سازی کاربردی browser.debugger به شما امکان می‌دهد فرمان‌های پروتکل Chrome DevTools (CDP) را به هدف مشخصی ارسال کنید. توضیح دقیق CDP خارج از محدوده این اسناد است—برای کسب اطلاعات بیشتر درباره CDP، اسناد رسمی CDP را بررسی کنید.

هدف‌ها

هدف نشان‌دهنده چیزی است که درحال اشکال‌زدایی است—این می‌تواند شامل برگه، ‏iframe، یا کارگر باشد. هر هدف با یک «شناسه منحصربه‌فرد جهانی» (UUID) شناسایی می‌شود و نوع مرتبطی دارد (مثل iframe،‏ shared_worker، و غیره).

درون یک هدف، ممکن است چندین زمینه اجرا وجود داشته باشد—برای مثال، iframeهای فرایند یکسان هدف یکتایی دریافت نمی‌کنند، بلکه به‌عنوان زمینه‌های متفاوتی نمایش داده می‌شوند که می‌توان از یک هدف واحد به آن‌ها دسترسی داشت.

دامنه‌های محدودشده

به‌دلایل امنیتی، «میانای برنامه‌سازی کاربردی» browser.debugger دسترسی به همه «حوزه‌های پروتکل» Chrome DevTools را فراهم نمی‌کند. دامنه‌های دردسترس عبارت‌اند از: دسترسی‌پذیری، ممیزی‌ها، CacheStorage، Console، CSS، Database، Debugger، DOM، DOMDebugger، DOMSnapshot، Emulation، Fetch، IO، Input، Inspector، Log، Network، Overlay، Page، Performance، Runtime، Storage، Target، Tracing، WebAudio، و WebAuthn.

کار کردن با قاب‌ها

نگاشت یک‌به‌یک قاب‌ها به هدف‌ها وجود ندارد. در یک برگه، چندین چارچوب فرایند یکسان ممکن است هدف یکسانی را هم‌رسانی کنند اما از زمینه اجرای متفاوتی استفاده کنند. ازطرف دیگر، ممکن است هدف جدیدی برای iframe خارج از فرایند ایجاد شود.

برای پیوست کردن به همه قاب‌ها، باید هر نوع قاب را به‌طور جداگانه مدیریت کنید:

  • به رویداد Runtime.executionContextCreated گوش دهید تا زمینه‌های اجرای جدید مرتبط با قاب‌های فرایند یکسان را شناسایی کنید.

  • مراحل پیوستن به هدف‌های مرتبط را برای شناسایی چارچوب‌های خارج از فرایند دنبال کنید.

پس‌از اتصال به هدف، ممکن است بخواهید به اهداف مرتبط دیگر ازجمله چارچوب‌های فرزند خارج از فرایند یا کارگران مرتبط متصل شوید.

از Chrome 125، میانای برنامه‌سازی کاربردی browser.debugger از جلسه‌های مسطح پشتیبانی می‌کند. این به شما امکان می‌دهد هدف‌های بیشتری را به‌عنوان فرزند به جلسه اشکال‌زدایی اصلی‌تان اضافه کنید و بدون نیاز به فراخوانی دیگری به browser.debugger.attach به آن‌ها پیام دهید. درعوض، می‌توانید هنگام فراخوانی browser.debugger.sendCommand، دارایی sessionId را اضافه کنید تا کودک هدفی را که می‌خواهید فرمان را به او ارسال کنید شناسایی کنید.

برای پیوست کردن خودکار به چارچوب‌های فرزند خارج از فرایند، ابتدا شنونده‌ای برای رویداد 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");
  }
});

سپس، با ارسال فرمان Target.setAutoAttach با گزینه flatten تنظیم‌شده روی true، پیوست خودکار را فعال کنید:

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

پیوست خودکار فقط به چارچوب‌هایی پیوست می‌شود که هدف از آن‌ها آگاه است، که محدود به چارچوب‌هایی است که فرزندان مستقیم چارچوب منسوب به آن هستند. برای مثال، با سلسله‌مراتب قاب A -> B -> C (که همه مبدأ مشترک دارند)، فراخوانی Target.setAutoAttach برای هدف مرتبط با A باعث می‌شود جلسه به B نیز پیوست شود. بااین‌حال، این کار بازگشتی نیست، بنابراین Target.setAutoAttach نیز باید برای پیوست کردن جلسه B به C فراخوانی شود.

مثال‌ها

برای امتحان کردن این «میانای برنامه‌سازی کاربردی»، نمونه میانای برنامه‌سازی کاربردی اشکال‌زدا را از مخزن chrome-extension-samples نصب کنید.

انواع

Debuggee

شناسه اشکال‌زدایی‌شونده. باید tabId،‏ extensionId، یا targetId مشخص شود

مشخصات

  • extensionId

    رشته اختیاری

    شناسه افزونه‌ای که می‌خواهید اشکال‌زدایی کنید. پیوستن به صفحه پس‌زمینه افزونه فقط زمانی امکان‌پذیر است که از کلید خط فرمان --silent-debugger-extension-api استفاده شود.

  • tabId

    عدد اختیاری

    شناسه برگه‌ای که می‌خواهید اشکال‌زدایی کنید.

  • targetId

    رشته اختیاری

    شناسه مبهم هدف اشکال‌زدایی.

DebuggerSession

‫Chrome نسخه ۱۲۵ و بالاتر

شناسه جلسه اشکال‌زدا. یکی از tabId،‏ extensionId، یا targetId باید مشخص شود. علاوه‌براین، می‌توان یک sessionId اختیاری ارائه کرد. اگر sessionId برای آرگومان‌های ارسال‌شده از onEvent مشخص شده باشد، یعنی رویداد از جلسه پروتکل فرزند در جلسه اشکال‌زدایی ریشه می‌آید. اگر sessionId هنگام ارسال به sendCommand مشخص شده باشد، جلسه پروتکل فرزند را در جلسه اشکال‌زدایی ریشه هدف‌یابی می‌کند.

مشخصات

  • extensionId

    رشته اختیاری

    شناسه افزونه‌ای که می‌خواهید اشکال‌زدایی کنید. پیوستن به صفحه پس‌زمینه افزونه فقط زمانی امکان‌پذیر است که از کلید خط فرمان --silent-debugger-extension-api استفاده شود.

  • sessionId

    رشته اختیاری

    شناسه مبهم جلسه «پروتکل Chrome DevTools». جلسه کودک را در جلسه ریشه شناسایی‌شده توسط tabId،‏ extensionId، یا targetId شناسایی می‌کند.

  • tabId

    عدد اختیاری

    شناسه برگه‌ای که می‌خواهید اشکال‌زدایی کنید.

  • targetId

    رشته اختیاری

    شناسه مبهم هدف اشکال‌زدایی.

DetachReason

‫Chrome نسخه ۴۴ و بالاتر

دلیل فسخ اتصال.

شمارشی

"target_closed"

"canceled_by_user"

TargetInfo

اطلاعات هدف اشکال‌زدایی

مشخصات

  • پیوست‌شده

    بولی

    اگر اشکال‌زدا ازقبل پیوست شده باشد درست است.

  • extensionId

    رشته اختیاری

    شناسه افزونه، اگر نوع = «صفحه_پس‌زمینه» تعریف شده باشد.

  • faviconUrl

    رشته اختیاری

    نشانی وب نماد وب‌سایت هدف.

  • id

    رشته

    شناسه هدف.

  • tabId

    عدد اختیاری

    شناسه زبانه، اگر نوع == «صفحه» تعریف شده باشد.

  • عنوان

    رشته

    عنوان صفحه هدف.

  • نوع هدف.

  • نشانی وب

    رشته

    نشانی وب هدف.

TargetInfoType

‫Chrome نسخه ۴۴ و بالاتر

نوع هدف.

شمارشی

«صفحه»

"background_page"

«کارگر»

«دیگر»

روش‌ها

attach()

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

اشکال‌زدا را به هدف داده‌شده پیوست می‌کند.

پارامترها

  • هدف

    هدف اشکال‌زدایی که می‌خواهید به آن پیوست کنید.

  • requiredVersion

    رشته

    نسخه پروتکل اشکال‌زدایی الزامی («۰.۱»). فقط می‌توان با نسخه اصلی منطبق و نسخه جزئی بزرگ‌تر یا مساوی به اشکال‌زدایی‌شونده پیوست کرد. فهرست نسخه‌های پروتکل را می‌توانید اینجا دریافت کنید.

بازگشتی‌ها

  • Promise<void>

    Chrome نسخه ۹۶ و بالاتر

    وقتی عملیات پیوست موفق یا ناموفق باشد، مشکل برطرف می‌شود. وعده بدون مقدار حل می‌شود. اگر پیوست ناموفق باشد، قول رد خواهد شد.

detach()

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

اشکال‌زدا را از هدف داده‌شده جدا می‌کند.

پارامترها

  • هدف

    هدف اشکال‌زدایی که می‌خواهید از آن جدا شوید.

بازگشتی‌ها

  • Promise<void>

    Chrome نسخه ۹۶ و بالاتر

    وقتی عملیات جدا کردن موفق یا ناموفق باشد، برطرف می‌شود. وعده بدون مقدار حل می‌شود. اگر جدا کردن ناموفق باشد، وعده رد خواهد شد.

getTargets()

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

فهرست هدف‌های اشکال‌زدایی دردسترس را برمی‌گرداند.

بازگشتی‌ها

  • Promise<TargetInfo[]>

    Chrome نسخه ۹۶ و بالاتر

sendCommand()

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

فرمان داده‌شده را به هدف اشکال‌زدایی ارسال می‌کند.

پارامترها

  • هدف اشکال‌زدایی که می‌خواهید فرمان را به آن ارسال کنید.

  • روش

    رشته

    نام روش. باید یکی از روش‌های تعریف‌شده توسط پروتکل اشکال‌زدایی از دور باشد.

  • commandParams

    شیء اختیاری

    شیء JSON با پارامترهای درخواست. این شیء باید با طرحواره پارامترهای اشکال‌زدایی از دور برای روش داده‌شده مطابقت داشته باشد.

بازگشتی‌ها

  • Promise<object | undefined>

    Chrome نسخه ۹۶ و بالاتر

    متن پاسخ. اگر هنگام پست کردن پیام خطایی رخ دهد، قول رد خواهد شد.

رویدادها

onDetach

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

وقتی مرورگر جلسه اشکال‌زدایی برگه را خاتمه می‌دهد، این رویداد راه‌اندازی می‌شود. این اتفاق زمانی روی می‌دهد که یا برگه بسته می‌شود یا Chrome DevTools برای برگه پیوست‌شده فراخوانده می‌شود.

پارامترها

onEvent

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

هرگاه رویداد ابزار دقیق مشکلات هدف اشکال‌زدایی راه‌اندازی شود، این رویداد اجرا می‌شود.

پارامترها

  • بازخوانی

    تابع

    پارامتر callback به‌صورت زیر است:

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

    • منبع
    • روش

      رشته

    • پارامترها

      شیء اختیاری