ब्यौरा
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
डीबगर सेशन आइडेंटिफ़ायर. कोई एक tabId, extensionsId या targetId तय करना ज़रूरी है. इसके अलावा, एक वैकल्पिक sessionId दिया जा सकता है. अगर onEvent
से भेजे गए आर्ग्युमेंट के लिए sessionId दिया गया है, तो इसका मतलब है कि इवेंट रूट डीबगी सेशन के किसी चाइल्ड प्रोटोकॉल सेशन से आ रहा है. अगर sendCommand
को पास किए जाने पर sessionId दिया जाता है, तो यह रूट डीबगी सेशन में किसी चाइल्ड प्रोटोकॉल सेशन को टारगेट करता है.
प्रॉपर्टी
-
extensionId
स्ट्रिंग ज़रूरी नहीं
उस एक्सटेंशन का आईडी जिसे आपको डीबग करना है. किसी एक्सटेंशन के बैकग्राउंड पेज में अटैच करने की सुविधा सिर्फ़ तब काम करती है, जब
--silent-debugger-extension-api
कमांड-लाइन स्विच का इस्तेमाल किया गया हो. -
sessionId
स्ट्रिंग ज़रूरी नहीं
Chrome DevTools प्रोटोकॉल सेशन का ओपेक आईडी. TabId, extensionsId या targetId से पहचाने गए रूट सेशन में किसी चाइल्ड सेशन की पहचान करता है.
-
tabId
नंबर वैकल्पिक
उस टैब का आईडी, जिसे आपको डीबग करना है.
-
targetId
स्ट्रिंग ज़रूरी नहीं
डीबग टारगेट का ओपेक आईडी.
DetachReason
कनेक्शन बंद किए जाने की वजह.
Enum
"target_closed"
"canceled_by_user"
TargetInfo
डीबग टारगेट की जानकारी
प्रॉपर्टी
-
अटैच किया गया
बूलियन
अगर डीबगर पहले से अटैच है, तो सही है.
-
extensionId
स्ट्रिंग ज़रूरी नहीं
एक्सटेंशन आईडी, अगर टाइप = 'background_page' है, तो इसका पता चलता है.
-
faviconUrl
स्ट्रिंग ज़रूरी नहीं
टारगेट फ़ेविकॉन यूआरएल.
-
आईडी
स्ट्रिंग
टारगेट आईडी.
-
tabId
नंबर वैकल्पिक
टैब आईडी, अगर टाइप == 'page' है.
-
title
स्ट्रिंग
टारगेट पेज का टाइटल.
-
टाइप
टारगेट टाइप.
-
url
स्ट्रिंग
टारगेट यूआरएल.
TargetInfoType
टारगेट टाइप.
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<TargetInfo[]>
Chrome 96 और उसके बाद के वर्शनमेनिफ़ेस्ट V3 और उसके बाद के वर्शन में प्रॉमिस काम करते हैं. हालांकि, कॉलबैक की सुविधा इन मामलों में दी जाती है पुराने सिस्टम के साथ काम करने की सुविधा. एक ही फ़ंक्शन कॉल में दोनों का इस्तेमाल नहीं किया जा सकता. कॉन्टेंट बनाने प्रॉमिस उसी टाइप के साथ ठीक होता है जिसे कॉलबैक में पास किया जाता है.
sendCommand()
chrome.debugger.sendCommand(
target: DebuggerSession,
method: string,
commandParams?: object,
callback?: function,
)
यह निर्देश, डीबग करने वाले टारगेट को भेजता है.
पैरामीटर
-
टारगेट
उस टारगेट को डीबग करना जिसे आपको निर्देश भेजना है.
-
तरीका
स्ट्रिंग
तरीके का नाम. यह रिमोट डीबगिंग प्रोटोकॉल के बताए गए तरीकों में से एक होना चाहिए.
-
commandParams
ऑब्जेक्ट ज़रूरी नहीं
अनुरोध पैरामीटर के साथ JSON ऑब्जेक्ट. यह ऑब्जेक्ट दिए गए तरीके के लिए, रिमोट डीबगिंग पैरामीटर स्कीम के मुताबिक होना चाहिए.
-
कॉलबैक
फ़ंक्शन वैकल्पिक
callback
पैरामीटर ऐसा दिखता है:(result?: object) => void
-
नतीजा
ऑब्जेक्ट ज़रूरी नहीं
रिस्पॉन्स के साथ JSON ऑब्जेक्ट. तरीके के नाम के आधार पर रिस्पॉन्स का स्ट्रक्चर अलग-अलग होता है. यह स्ट्रक्चर 'रिटर्न' से तय होता है रिमोट डीबगिंग प्रोटोकॉल में निर्देश की जानकारी का एट्रिब्यूट.
-
रिटर्न
-
Promise<object | तय नहीं है>
Chrome 96 और उसके बाद के वर्शनमेनिफ़ेस्ट V3 और उसके बाद के वर्शन में प्रॉमिस काम करते हैं. हालांकि, कॉलबैक की सुविधा इन मामलों में दी जाती है पुराने सिस्टम के साथ काम करने की सुविधा. एक ही फ़ंक्शन कॉल में दोनों का इस्तेमाल नहीं किया जा सकता. कॉन्टेंट बनाने प्रॉमिस उसी टाइप के साथ ठीक होता है जिसे कॉलबैक में पास किया जाता है.
इवेंट
onDetach
chrome.debugger.onDetach.addListener(
callback: function,
)
यह तब ट्रिगर होता है, जब ब्राउज़र, टैब के लिए डीबग करने वाले सेशन को खत्म कर देता है. ऐसा तब होता है, जब टैब को बंद किया जा रहा हो या अटैच किए गए टैब के लिए Chrome DevTools को शुरू किया जा रहा हो.
पैरामीटर
-
कॉलबैक
फ़ंक्शन
callback
पैरामीटर ऐसा दिखता है:(source: Debuggee, reason: DetachReason) => void
-
source
-
कारण
-
onEvent
chrome.debugger.onEvent.addListener(
callback: function,
)
टारगेट से जुड़ी समस्याओं वाले इंस्ट्रुमेंटेशन इवेंट को डीबग करने पर सक्रिय होता है.
पैरामीटर
-
कॉलबैक
फ़ंक्शन
callback
पैरामीटर ऐसा दिखता है:(source: DebuggerSession, method: string, params?: object) => void
-
source
-
तरीका
स्ट्रिंग
-
पैरामीटर
ऑब्जेक्ट ज़रूरी नहीं
-