कंपनी का ब्यौरा
chrome.debugger
API, Chrome के रिमोट डीबगिंग प्रोटोकॉल के लिए एक वैकल्पिक ट्रांसपोर्ट के रूप में काम करता है. इंस्ट्रुमेंट नेटवर्क इंटरैक्शन, JavaScript डीबग करने, डीओएम और सीएसएस में बदलाव करने वगैरह के लिए, एक या उससे ज़्यादा टैब अटैच करने के लिए chrome.debugger
का इस्तेमाल करें. sendCommand
वाले टैब को टारगेट करने के लिए, Debuggee
प्रॉपर्टी tabId
का इस्तेमाल करें. साथ ही, onEvent
कॉलबैक से, इवेंट को tabId
तक रूट करें.
अनुमतियां
debugger
इस एपीआई का इस्तेमाल करने के लिए, आपको अपने एक्सटेंशन के मेनिफ़ेस्ट में "debugger"
की अनुमति के बारे में एलान करना होगा.
{
"name": "My extension",
...
"permissions": [
"debugger",
],
...
}
सिद्धांत और इस्तेमाल
अटैच होने के बाद, chrome.debugger
API की मदद से, दिए गए टारगेट के लिए Chrome DevTools प्रोटोकॉल
(सीडीपी) के निर्देश भेजे जा सकते हैं. इस दस्तावेज़ में सीडीपी के बारे में पूरी जानकारी नहीं दी गई है.
सीडीपी के बारे में ज़्यादा जानने के लिए, सीडीपी का आधिकारिक दस्तावेज़ पढ़ें.
टारगेट
टारगेट किसी ऐसी चीज़ को दिखाते हैं जिसे डीबग किया जा रहा है—इसमें कोई टैब, iframe या कोई वर्कर शामिल हो सकता है. हर टारगेट की पहचान यूयूआईडी से की जाती है और उससे जुड़ा एक टाइप होता है, जैसे कि iframe
, shared_worker
वगैरह.
टारगेट में, लागू करने के कई कॉन्टेक्स्ट हो सकते हैं. उदाहरण के लिए, एक जैसे प्रोसेस वाले iframe को यूनीक टारगेट नहीं मिलता. इसके बजाय, उन्हें अलग-अलग कॉन्टेक्स्ट के तौर पर दिखाया जाता है, जिन्हें एक ही टारगेट से ऐक्सेस किया जा सकता है.
प्रतिबंधित डोमेन
सुरक्षा की वजहों से, chrome.debugger
API सभी Chrome DevTools प्रोटोकॉल डोमेन का ऐक्सेस नहीं देता है. ये डोमेन उपलब्ध हैं: Accessibility,
Access4,, अन्य होस्ट, CacheStorageDOMDebuggerDOMSnapshotWebAudioWebAuthn
फ़्रेम के साथ काम करें
टारगेट करने के लिए, फ़्रेम की वन-टू-वन मैपिंग नहीं है. किसी एक टैब में, एक ही प्रोसेस के कई फ़्रेम एक ही टारगेट शेयर कर सकते हैं. हालांकि, वे अलग-अलग एक्ज़ीक्यूशन कॉन्टेक्स्ट का इस्तेमाल कर सकते हैं. दूसरी ओर, 'प्रोसेस से बाहर हैं' 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");
}
});
इसके बाद, true
पर सेट किए गए flatten
विकल्प के साथ Target.setAutoAttach
कमांड भेजकर अपने-आप अटैच करें सुविधा चालू करें:
await chrome.debugger.sendCommand({ tabId }, "Target.setAutoAttach", {
autoAttach: true,
waitForDebuggerOnStart: false,
flatten: true,
filter: [{ type: "iframe", exclude: false }]
});
उदाहरण
इस एपीआई को इस्तेमाल करने के लिए, chrome-extension-sample डेटा स्टोर करने की जगह से डीबगर एपीआई का उदाहरण इंस्टॉल करें.
टाइप
Debuggee
Debuggee आइडेंटिफ़ायर. tabId, एक्सटेंशनId या targetId दर्ज करना ज़रूरी है
प्रॉपर्टी
-
extensionId
स्ट्रिंग ज़रूरी नहीं
उस एक्सटेंशन का आईडी जिसे डीबग करना है. किसी एक्सटेंशन के बैकग्राउंड पेज में अटैच करने की सुविधा सिर्फ़ तब काम करती है, जब
--silent-debugger-extension-api
कमांड लाइन स्विच का इस्तेमाल किया गया हो. -
tabId
नंबर ज़रूरी नहीं
उस टैब का आईडी जिसे डीबग करना है.
-
targetId
स्ट्रिंग ज़रूरी नहीं
डीबग टारगेट का ओपेक आईडी.
DebuggerSession
डीबगर सेशन आइडेंटिफ़ायर. TabId, extensionsId या targetId में से कोई एक बताना ज़रूरी है. इसके अलावा, एक वैकल्पिक sessionId दिया जा सकता है. अगर onEvent
से भेजे गए आर्ग्युमेंट के लिए, sessionId दिया गया है, तो इसका मतलब है कि इवेंट, रूट डीबगी सेशन में चाइल्ड प्रोटोकॉल सेशन से आ रहा है. अगर sendCommand
को पास करने पर sessionId दिया जाता है, तो यह रूट डीबगी सेशन में चाइल्ड प्रोटोकॉल सेशन को टारगेट करता है.
प्रॉपर्टी
-
extensionId
स्ट्रिंग ज़रूरी नहीं
उस एक्सटेंशन का आईडी जिसे डीबग करना है. किसी एक्सटेंशन के बैकग्राउंड पेज में अटैच करने की सुविधा सिर्फ़ तब काम करती है, जब
--silent-debugger-extension-api
कमांड लाइन स्विच का इस्तेमाल किया गया हो. -
sessionId
स्ट्रिंग ज़रूरी नहीं
Chrome DevTools प्रोटोकॉल सेशन की ओपेक आईडी. यह TabId, एक्सटेंशनId या targetId से पहचाने गए रूट सेशन में चाइल्ड सेशन की पहचान करता है.
-
tabId
नंबर ज़रूरी नहीं
उस टैब का आईडी जिसे डीबग करना है.
-
targetId
स्ट्रिंग ज़रूरी नहीं
डीबग टारगेट का ओपेक आईडी.
DetachReason
कनेक्शन बंद करने की वजह.
Enum
"target_closed"
"canceled_by_user"
TargetInfo
डीबग टारगेट की जानकारी
प्रॉपर्टी
-
अटैच किया गया
boolean
अगर डीबगर पहले से अटैच है, तो सही.
-
extensionId
स्ट्रिंग ज़रूरी नहीं
एक्सटेंशन आईडी, अगर टाइप = 'background_page' है, तो इससे पता चलता है.
-
faviconUrl
स्ट्रिंग ज़रूरी नहीं
फ़ेविकॉन का यूआरएल टारगेट करें.
-
आईडी
स्ट्रिंग
लक्ष्य आईडी.
-
tabId
नंबर ज़रूरी नहीं
टैब आईडी, अगर टाइप == 'page' है, तो इसे परिभाषित किया जाता है.
-
title
स्ट्रिंग
टारगेट पेज का टाइटल.
-
टाइप
टारगेट टाइप.
-
यूआरएल
स्ट्रिंग
टारगेट यूआरएल.
TargetInfoType
टारगेट टाइप.
Enum
"background_page"
तरीके
attach()
chrome.debugger.attach(
target: Debuggee,
requiredVersion: string,
callback?: function,
)
दिए गए टारगेट में डीबगर को अटैच करता है.
पैरामीटर
-
टारगेट
वह टारगेट डीबग किया जा रहा है जिसमें आपको अटैच करना है.
-
requiredVersion
स्ट्रिंग
डीबग करने के प्रोटोकॉल का ज़रूरी वर्शन ("0.1"). सिर्फ़ मिलते-जुलते मेजर वर्शन और बड़े या बराबर माइनर वर्शन वाले डीबगी को अटैच किया जा सकता है. प्रोटोकॉल वर्शन की सूची यहां देखी जा सकती है.
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर ऐसा दिखता है:() => void
लौटाए गए प्रॉडक्ट
-
Promise<void>
Chrome 96 के बाद के वर्शनप्रॉमिस, मेनिफ़ेस्ट V3 और इसके बाद के वर्शन में काम करता है. हालांकि, पुराने सिस्टम के साथ काम करने के लिए कॉलबैक दिए जाते हैं. आप एक ही फ़ंक्शन कॉल पर दोनों का इस्तेमाल नहीं कर सकते. प्रॉमिस उसी टाइप के साथ रिज़ॉल्व हो जाती है जिसे कॉलबैक को पास किया जाता है.
detach()
chrome.debugger.detach(
target: Debuggee,
callback?: function,
)
डीबगर को दिए गए टारगेट से अलग करता है.
पैरामीटर
-
टारगेट
वह टारगेट डीबग किया जा रहा है जिससे आपको अलग करना है.
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर ऐसा दिखता है:() => void
लौटाए गए प्रॉडक्ट
-
Promise<void>
Chrome 96 के बाद के वर्शनप्रॉमिस, मेनिफ़ेस्ट V3 और इसके बाद के वर्शन में काम करता है. हालांकि, पुराने सिस्टम के साथ काम करने के लिए कॉलबैक दिए जाते हैं. आप एक ही फ़ंक्शन कॉल पर दोनों का इस्तेमाल नहीं कर सकते. प्रॉमिस उसी टाइप के साथ रिज़ॉल्व हो जाती है जिसे कॉलबैक को पास किया जाता है.
getTargets()
chrome.debugger.getTargets(
callback?: function,
)
उपलब्ध डीबग टारगेट की सूची दिखाता है.
पैरामीटर
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर ऐसा दिखता है:(result: TargetInfo[]) => void
-
नतीजा
उपलब्ध डीबग टारगेट से जुड़े TargetInfo ऑब्जेक्ट की कलेक्शन.
-
लौटाए गए प्रॉडक्ट
-
Promise<TargetInfo[]>
Chrome 96 के बाद के वर्शनप्रॉमिस, मेनिफ़ेस्ट V3 और इसके बाद के वर्शन में काम करता है. हालांकि, पुराने सिस्टम के साथ काम करने के लिए कॉलबैक दिए जाते हैं. आप एक ही फ़ंक्शन कॉल पर दोनों का इस्तेमाल नहीं कर सकते. प्रॉमिस उसी टाइप के साथ रिज़ॉल्व हो जाती है जिसे कॉलबैक को पास किया जाता है.
sendCommand()
chrome.debugger.sendCommand(
target: DebuggerSession,
method: string,
commandParams?: object,
callback?: function,
)
डीबगिंग टारगेट को दिया गया निर्देश भेजता है.
पैरामीटर
-
टारगेट
वह टारगेट डीबग किया जा रहा है जिस पर आपको निर्देश भेजना है.
-
method
स्ट्रिंग
तरीके का नाम. यह रिमोट डीबगिंग प्रोटोकॉल के बताए गए तरीकों में से एक होना चाहिए.
-
commandParams
ऑब्जेक्ट ज़रूरी नहीं
अनुरोध पैरामीटर के साथ JSON ऑब्जेक्ट. यह ऑब्जेक्ट, दिए गए तरीके के लिए रिमोट डीबगिंग पैरामीटर स्कीम के मुताबिक होना चाहिए.
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर ऐसा दिखता है:(result?: object) => void
-
नतीजा
ऑब्जेक्ट ज़रूरी नहीं
रिस्पॉन्स के साथ JSON ऑब्जेक्ट. रिस्पॉन्स का स्ट्रक्चर, तरीके के नाम के हिसाब से अलग-अलग होता है. इसे रिमोट डीबगिंग प्रोटोकॉल में मौजूद कमांड की जानकारी के 'returns' एट्रिब्यूट से तय किया जाता है.
-
लौटाए गए प्रॉडक्ट
-
Promise<object | undefined>
Chrome 96 के बाद के वर्शनप्रॉमिस, मेनिफ़ेस्ट V3 और इसके बाद के वर्शन में काम करता है. हालांकि, पुराने सिस्टम के साथ काम करने के लिए कॉलबैक दिए जाते हैं. आप एक ही फ़ंक्शन कॉल पर दोनों का इस्तेमाल नहीं कर सकते. प्रॉमिस उसी टाइप के साथ रिज़ॉल्व हो जाती है जिसे कॉलबैक को पास किया जाता है.
इवेंट
onDetach
chrome.debugger.onDetach.addListener(
callback: function,
)
तब सक्रिय होता है, जब ब्राउज़र, टैब के लिए डीबगिंग सेशन को खत्म करता है. ऐसा तब होता है, जब टैब को बंद किया जा रहा हो या अटैच किए गए टैब के लिए Chrome DevTools को शुरू किया गया हो.
पैरामीटर
-
कॉलबैक
function
callback
पैरामीटर ऐसा दिखता है:(source: Debuggee, reason: DetachReason) => void
-
source
-
वजह
-
onEvent
chrome.debugger.onEvent.addListener(
callback: function,
)
टारगेट से जुड़ी समस्याओं के इंस्ट्रुमेंटेशन इवेंट को डीबग करने पर ट्रिगर होता है.
पैरामीटर
-
कॉलबैक
function
callback
पैरामीटर ऐसा दिखता है:(source: DebuggerSession, method: string, params?: object) => void
-
source
-
method
स्ट्रिंग
-
params
ऑब्जेक्ट ज़रूरी नहीं
-