chrome.debugger

ब्यौरा

chrome.debugger एपीआई, Chrome के रिमोट डीबगिंग प्रोटोकॉल के लिए, वैकल्पिक ट्रांसपोर्ट के तौर पर काम करता है. इंस्ट्रुमेंट नेटवर्क इंटरैक्शन के लिए एक या ज़्यादा टैब को अटैच करने, JavaScript को डीबग करने, DOM और सीएसएस में बदलाव करने वगैरह के लिए chrome.debugger का इस्तेमाल करें. sendCommand वाले टैब को टारगेट करने और onEvent कॉलबैक से tabId की मदद से इवेंट को रूट करने के लिए, Debuggee प्रॉपर्टी tabId का इस्तेमाल करें.

अनुमतियां

debugger

इस एपीआई का इस्तेमाल करने के लिए, आपको अपने एक्सटेंशन के मेनिफ़ेस्ट में "debugger" अनुमति के बारे में जानकारी देनी होगी.

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

सिद्धांत और उनका इस्तेमाल

अटैच होने के बाद, chrome.debugger एपीआई की मदद से, Chrome DevTools प्रोटोकॉल भेजा जा सकता है (CDP) किसी तय टारगेट के लिए निर्देश देता है. सीडीपी के बारे में विस्तार से जानकारी देना मुश्किल है सीडीपी के बारे में ज़्यादा जानने के लिए, यहां जाएं: सीडीपी का आधिकारिक दस्तावेज़.

टारगेट

टारगेट ऐसी चीज़ दिखाते हैं जिसे डीबग किया जा रहा है—इसमें टैब, iframe या वर्कर. हर टारगेट की पहचान यूयूआईडी से की जाती है और टारगेट से जुड़ी होती है टाइप (जैसे कि iframe, shared_worker वगैरह).

टारगेट के अंदर, प्रोग्राम चलाने के एक से ज़्यादा कॉन्टेक्स्ट हो सकते हैं—उदाहरण के लिए, एक ही प्रोसेस iframe को कोई यूनीक टारगेट नहीं मिलता. इसके बजाय, इन्हें इस तरह दिखाया जाता है अलग-अलग कॉन्टेक्स्ट देखें जिन्हें एक ही टारगेट से ऐक्सेस किया जा सकता है.

प्रतिबंधित डोमेन

सुरक्षा की वजहों से, chrome.debugger एपीआई, Chrome के सभी DevTools का ऐक्सेस नहीं देता है प्रोटोकॉल डोमेन. फ़िलहाल, ये डोमेन उपलब्ध हैं: सुलभता, ऑडिट, CacheStorage, कंसोल, सीएसएस, डेटाबेस, डीबगर, DOM, DOMDebugger, DOMSnapshot, एम्युलेशन, फ़ेच करें, IO, इनपुट, इंस्पेक्टर, लॉग, नेटवर्क, ओवरले, पेज, परफ़ॉर्मेंस, प्रोफ़ाइलर, रनटाइम, डिवाइस का स्टोरेज, टारगेट, ट्रेसिंग, WebAudio और WebAuthn.

फ़्रेम के साथ काम करें

टारगेट करने के लिए, फ़्रेम की एक से एक मैपिंग नहीं है. एक टैब में, कई एक जैसे प्रोसेस फ़्रेम एक ही टारगेट में हो सकते हैं. हालांकि, मुमकिन है कि वे किसी दूसरे लागू करने का संदर्भ होना चाहिए. दूसरी ओर, नया टारगेट प्रोसेस से बाहर के iframe के लिए बनाया गया.

सभी फ़्रेम के साथ अटैच करने के लिए, आपको हर तरह के फ़्रेम को अलग-अलग हैंडल करना होगा:

  • Runtime.executionContextCreated इवेंट को सुनकर, नए इवेंट की पहचान करें एक जैसे प्रोसेस फ़्रेम से जुड़े एक्ज़ीक्यूशन कॉन्टेक्स्ट.

  • मिलते-जुलते टारगेट से अटैच करने के लिए बताया गया तरीका अपनाएं उन फ़्रेम की पहचान करें जो प्रोसेस से बाहर हैं.

किसी टारगेट से कनेक्ट करने के बाद, हो सकता है कि आप दूसरे मिलते-जुलते टारगेट से कनेक्ट करना चाहें इसमें प्रोसेस से बाहर के चाइल्ड फ़्रेम या उससे जुड़े वर्कर शामिल हैं.

Chrome 125 और इसके बाद के वर्शन में, chrome.debugger एपीआई, फ़्लैट सेशन के साथ काम करता है. यह की मदद से, अपने मुख्य डीबगर सेशन में बच्चों के तौर पर अतिरिक्त टारगेट जोड़े जा सकते हैं और उन्हें मैसेज भेजने के लिए, 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");
  }
});

इसके बाद, Target.setAutoAttach निर्देश को इसकी मदद से अपने-आप अटैच करें सुविधा को चालू करें flatten विकल्प true पर सेट किया गया:

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

उदाहरण

इस एपीआई को आज़माने के लिए, chrome-extension-samples से debugger API का उदाहरण इंस्टॉल करें डेटा स्टोर करने की जगह.

टाइप

Debuggee

Debuggee आइडेंटिफ़ायर. tabId, extensionsId या targetId में से किसी एक का इस्तेमाल करना ज़रूरी है

प्रॉपर्टी

  • extensionId

    स्ट्रिंग ज़रूरी नहीं

    उस एक्सटेंशन का आईडी जिसे आपको डीबग करना है. किसी एक्सटेंशन के बैकग्राउंड पेज में अटैच करने की सुविधा सिर्फ़ तब काम करती है, जब --silent-debugger-extension-api कमांड-लाइन स्विच का इस्तेमाल किया गया हो.

  • tabId

    नंबर वैकल्पिक

    उस टैब का आईडी, जिसे आपको डीबग करना है.

  • targetId

    स्ट्रिंग ज़रूरी नहीं

    डीबग टारगेट का ओपेक आईडी.

DebuggerSession

Chrome 125 और उसके बाद वाले वर्शन

डीबगर सेशन आइडेंटिफ़ायर. कोई एक tabId, extensionsId या targetId तय करना ज़रूरी है. इसके अलावा, एक वैकल्पिक sessionId दिया जा सकता है. अगर onEvent से भेजे गए आर्ग्युमेंट के लिए sessionId दिया गया है, तो इसका मतलब है कि इवेंट रूट डीबगी सेशन के किसी चाइल्ड प्रोटोकॉल सेशन से आ रहा है. अगर sendCommand को पास किए जाने पर sessionId दिया जाता है, तो यह रूट डीबगी सेशन में किसी चाइल्ड प्रोटोकॉल सेशन को टारगेट करता है.

प्रॉपर्टी

  • extensionId

    स्ट्रिंग ज़रूरी नहीं

    उस एक्सटेंशन का आईडी जिसे आपको डीबग करना है. किसी एक्सटेंशन के बैकग्राउंड पेज में अटैच करने की सुविधा सिर्फ़ तब काम करती है, जब --silent-debugger-extension-api कमांड-लाइन स्विच का इस्तेमाल किया गया हो.

  • sessionId

    स्ट्रिंग ज़रूरी नहीं

    Chrome DevTools प्रोटोकॉल सेशन का ओपेक आईडी. TabId, extensionsId या targetId से पहचाने गए रूट सेशन में किसी चाइल्ड सेशन की पहचान करता है.

  • tabId

    नंबर वैकल्पिक

    उस टैब का आईडी, जिसे आपको डीबग करना है.

  • targetId

    स्ट्रिंग ज़रूरी नहीं

    डीबग टारगेट का ओपेक आईडी.

DetachReason

Chrome 44 और उसके बाद वाले वर्शन के लिए

कनेक्शन बंद किए जाने की वजह.

Enum

"target_closed"

"canceled_by_user"

TargetInfo

डीबग टारगेट की जानकारी

प्रॉपर्टी

  • अटैच किया गया

    बूलियन

    अगर डीबगर पहले से अटैच है, तो सही है.

  • extensionId

    स्ट्रिंग ज़रूरी नहीं

    एक्सटेंशन आईडी, अगर टाइप = 'background_page' है, तो इसका पता चलता है.

  • faviconUrl

    स्ट्रिंग ज़रूरी नहीं

    टारगेट फ़ेविकॉन यूआरएल.

  • आईडी

    स्ट्रिंग

    टारगेट आईडी.

  • tabId

    नंबर वैकल्पिक

    टैब आईडी, अगर टाइप == 'page' है.

  • title

    स्ट्रिंग

    टारगेट पेज का टाइटल.

  • टाइप

    टारगेट टाइप.

  • url

    स्ट्रिंग

    टारगेट यूआरएल.

TargetInfoType

Chrome 44 और उसके बाद वाले वर्शन के लिए

टारगेट टाइप.

Enum

"पेज"

"background_page"

"कर्मी"

"अन्य"

तरीके

attach()

प्रॉमिस
chrome.debugger.attach(
  target: Debuggee,
  requiredVersion: string,
  callback?: function,
)

दिए गए टारगेट में डीबगर अटैच करता है.

पैरामीटर

  • टारगेट

    उस टारगेट को डीबग करना जिसे आपको अटैच करना है.

  • requiredVersion

    स्ट्रिंग

    डीबग करने वाले प्रोटोकॉल का ज़रूरी वर्शन ("0.1"). डीबग करने के लिए, सिर्फ़ उस मेजर वर्शन और उसके बाद के माइनर वर्शन के साथ दस्तावेज़ अटैच किया जा सकता है. प्रोटोकॉल वर्शन की सूची यहां दी गई है.

  • कॉलबैक

    फ़ंक्शन वैकल्पिक

    callback पैरामीटर ऐसा दिखता है:

    () => void

रिटर्न

  • प्रॉमिस<void>

    Chrome 96 और उसके बाद के वर्शन

    मेनिफ़ेस्ट V3 और उसके बाद के वर्शन में प्रॉमिस काम करते हैं. हालांकि, कॉलबैक की सुविधा इन मामलों में दी जाती है पुराने सिस्टम के साथ काम करने की सुविधा. एक ही फ़ंक्शन कॉल में दोनों का इस्तेमाल नहीं किया जा सकता. कॉन्टेंट बनाने प्रॉमिस उसी टाइप के साथ ठीक होता है जिसे कॉलबैक में पास किया जाता है.

detach()

प्रॉमिस
chrome.debugger.detach(
  target: Debuggee,
  callback?: function,
)

दिए गए टारगेट से डीबगर को अलग करता है.

पैरामीटर

  • टारगेट

    वह टारगेट डीबग करना जिससे आपको अलग करना है.

  • कॉलबैक

    फ़ंक्शन वैकल्पिक

    callback पैरामीटर ऐसा दिखता है:

    () => void

रिटर्न

  • प्रॉमिस<void>

    Chrome 96 और उसके बाद के वर्शन

    मेनिफ़ेस्ट V3 और उसके बाद के वर्शन में प्रॉमिस काम करते हैं. हालांकि, कॉलबैक की सुविधा इन मामलों में दी जाती है पुराने सिस्टम के साथ काम करने की सुविधा. एक ही फ़ंक्शन कॉल में दोनों का इस्तेमाल नहीं किया जा सकता. कॉन्टेंट बनाने प्रॉमिस उसी टाइप के साथ ठीक होता है जिसे कॉलबैक में पास किया जाता है.

getTargets()

प्रॉमिस
chrome.debugger.getTargets(
  callback?: function,
)

उपलब्ध डीबग टारगेट की सूची दिखाता है.

पैरामीटर

  • कॉलबैक

    फ़ंक्शन वैकल्पिक

    callback पैरामीटर ऐसा दिखता है:

    (result: TargetInfo[]) => void

    • नतीजा

      उपलब्ध डीबग टारगेट से जुड़े TargetInfo ऑब्जेक्ट की कलेक्शन.

रिटर्न

  • Promise&lt;TargetInfo[]&gt;

    Chrome 96 और उसके बाद के वर्शन

    मेनिफ़ेस्ट V3 और उसके बाद के वर्शन में प्रॉमिस काम करते हैं. हालांकि, कॉलबैक की सुविधा इन मामलों में दी जाती है पुराने सिस्टम के साथ काम करने की सुविधा. एक ही फ़ंक्शन कॉल में दोनों का इस्तेमाल नहीं किया जा सकता. कॉन्टेंट बनाने प्रॉमिस उसी टाइप के साथ ठीक होता है जिसे कॉलबैक में पास किया जाता है.

sendCommand()

प्रॉमिस
chrome.debugger.sendCommand(
  target: DebuggerSession,
  method: string,
  commandParams?: object,
  callback?: function,
)

यह निर्देश, डीबग करने वाले टारगेट को भेजता है.

पैरामीटर

  • टारगेट

    उस टारगेट को डीबग करना जिसे आपको निर्देश भेजना है.

  • तरीका

    स्ट्रिंग

    तरीके का नाम. यह रिमोट डीबगिंग प्रोटोकॉल के बताए गए तरीकों में से एक होना चाहिए.

  • commandParams

    ऑब्जेक्ट ज़रूरी नहीं

    अनुरोध पैरामीटर के साथ JSON ऑब्जेक्ट. यह ऑब्जेक्ट दिए गए तरीके के लिए, रिमोट डीबगिंग पैरामीटर स्कीम के मुताबिक होना चाहिए.

  • कॉलबैक

    फ़ंक्शन वैकल्पिक

    callback पैरामीटर ऐसा दिखता है:

    (result?: object) => void

    • नतीजा

      ऑब्जेक्ट ज़रूरी नहीं

      रिस्पॉन्स के साथ JSON ऑब्जेक्ट. तरीके के नाम के आधार पर रिस्पॉन्स का स्ट्रक्चर अलग-अलग होता है. यह स्ट्रक्चर 'रिटर्न' से तय होता है रिमोट डीबगिंग प्रोटोकॉल में निर्देश की जानकारी का एट्रिब्यूट.

रिटर्न

  • Promise&lt;object | तय नहीं है>

    Chrome 96 और उसके बाद के वर्शन

    मेनिफ़ेस्ट V3 और उसके बाद के वर्शन में प्रॉमिस काम करते हैं. हालांकि, कॉलबैक की सुविधा इन मामलों में दी जाती है पुराने सिस्टम के साथ काम करने की सुविधा. एक ही फ़ंक्शन कॉल में दोनों का इस्तेमाल नहीं किया जा सकता. कॉन्टेंट बनाने प्रॉमिस उसी टाइप के साथ ठीक होता है जिसे कॉलबैक में पास किया जाता है.

इवेंट

onDetach

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

यह तब ट्रिगर होता है, जब ब्राउज़र, टैब के लिए डीबग करने वाले सेशन को खत्म कर देता है. ऐसा तब होता है, जब टैब को बंद किया जा रहा हो या अटैच किए गए टैब के लिए Chrome DevTools को शुरू किया जा रहा हो.

पैरामीटर

onEvent

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

टारगेट से जुड़ी समस्याओं वाले इंस्ट्रुमेंटेशन इवेंट को डीबग करने पर सक्रिय होता है.

पैरामीटर

  • कॉलबैक

    फ़ंक्शन

    callback पैरामीटर ऐसा दिखता है:

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

    • तरीका

      स्ट्रिंग

    • पैरामीटर

      ऑब्जेक्ट ज़रूरी नहीं