डीबग एक्सटेंशन

एक्सटेंशन, वेब पेजों की तरह ही Chrome DevTools को ऐक्सेस कर सकते हैं. एक्सटेंशन को डीबग करने में विशेषज्ञ बनने के लिए, आपके पास एक्सटेंशन के अलग-अलग कॉम्पोनेंट के लॉग और गड़बड़ियों को ढूंढने का तरीका जानना ज़रूरी है. इस ट्यूटोरियल में, एक्सटेंशन को डीबग करने की बुनियादी तकनीकें बताई गई हैं.

शुरू करने से पहले

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

एक्सटेंशन को तोड़ना

यह ट्यूटोरियल एक बार में एक एक्सटेंशन कॉम्पोनेंट को नुकसान पहुंचाएगा और उसे ठीक करने का तरीका बताएगा. अगले सेक्शन में जाने से पहले, किसी एक सेक्शन में बताई गई गड़बड़ियों को पहले जैसा करना न भूलें. GitHub पर ब्रोकन कलर सैंपल डाउनलोड करें.

मेनिफ़ेस्ट को डीबग करें

सबसे पहले, "version" कुंजी को "versions" में बदलकर मेनिफ़ेस्ट फ़ाइल को ब्रेक करेंगे:

manifest.json:

{
  "name": "Broken Background Color",
  "version": "1.0",
  "versions": "1.0",
  "description": "Fix an Extension!",
  ...
}

अब एक्सटेंशन को स्थानीय तौर पर लोड करने की कोशिश करते हैं. आपको गड़बड़ी की जानकारी देने वाला डायलॉग बॉक्स दिखेगा:

Failed to load extension
Required value version is missing or invalid. It must be between 1-4 dot-separated integers each between 0 and 65536.
Could not load manifest.
अमान्य मेनिफ़ेस्ट कुंजी वाला एक्सटेंशन, लोड करते समय गड़बड़ी वाला डायलॉग बॉक्स ट्रिगर कर रहा है.
मेनिफ़ेस्ट फ़ाइल में अमान्य गड़बड़ी वाला डायलॉग बॉक्स.

जब कोई मेनिफ़ेस्ट कुंजी अमान्य होती है, तो एक्सटेंशन लोड नहीं हो पाता, लेकिन Chrome आपको इस समस्या को ठीक करने के तरीके का संकेत देता है.

उस बदलाव को पहले जैसा करें. साथ ही, गलत अनुमति देकर देखें कि क्या होता है. "activeTab" की अनुमति को अंग्रेज़ी के छोटे अक्षरों "activetab" में बदलें:

manifest.json:

{
  ...
  "permissions": ["activeTab", "scripting", "storage"],
  "permissions": ["activetab", "scripting", "storage"],
  ...
}

एक्सटेंशन सेव करें और इसे फिर से लोड करके देखें. इस बार यह लोड हो जाना चाहिए. एक्सटेंशन मैनेजमेंट पेज में आपको तीन बटन दिखेंगे: ब्यौरा, हटाएं, और गड़बड़ियां. कोई गड़बड़ी होने पर, गड़बड़ियां बटन का लेबल लाल रंग का हो जाता है. गड़बड़ियां बटन पर क्लिक करके नीचे दी गई गड़बड़ियां देखें:

Permission 'activetab' is unknown or URL pattern is malformed.
गड़बड़ी वाले बटन पर क्लिक किया जाता है और एक गड़बड़ी दिखती है
गड़बड़ियां बटन पर क्लिक करके गड़बड़ी का मैसेज मिलना.

आगे बढ़ने से पहले, अनुमति को बदलें और लॉग मिटाने के लिए, ऊपर दाएं कोने में मौजूद सभी हटाएं पर क्लिक करें. इसके बाद, एक्सटेंशन को फिर से लोड करें.

'सभी आइटम मिटाएं' बटन
एक्सटेंशन की गड़बड़ियों को ठीक करने का तरीका.

सर्विस वर्कर को डीबग करना

लॉग का पता लगाया जा रहा है

सर्विस वर्कर, डिफ़ॉल्ट रंग को स्टोरेज पर सेट करता है और इसे कंसोल में लॉग करता है. यह लॉग देखने के लिए, व्यू की जांच करें के बगल में मौजूद नीला लिंक चुनकर Chrome DevTools पैनल खोलें.

एक्सटेंशन सर्विस वर्कर के लिए DevTools खोला जा रहा है.
Chrome DevTools पैनल में सर्विस वर्कर के लॉग.

गड़बड़ियों का पता लगाना

onInstalled को लोअरकेस oninstalled में बदलकर सर्विस वर्कर को ब्रेक करें:

service-worker.js:

// There's a typo in the line below;
// ❌ oninstalled should be ✅ onInstalled.
chrome.runtime.onInstalled.addListener(() => { 
chrome.runtime.oninstalled.addListener(() => { 
  chrome.storage.sync.set({ color: '#3aa757' }, () => {
    console.log('The background color is green.');
  });
});

गड़बड़ी का लॉग देखने के लिए, रीफ़्रेश करें और गड़बड़ियां पर क्लिक करें. पहली गड़बड़ी आपको बताती है कि सर्विस वर्कर रजिस्टर नहीं हुआ. इसका मतलब है कि शुरुआत करने के दौरान कोई गड़बड़ी हुई:

Service worker registration failed. Status code: 15.
सर्विस वर्कर रजिस्ट्रेशन नहीं किया जा सका. स्थिति कोड: 15 गड़बड़ी का मैसेज
सर्विस वर्कर रजिस्ट्रेशन से जुड़ी गड़बड़ी का मैसेज.

असल गड़बड़ी इसके बाद आती है:

Uncaught TypeError: Cannot read properties of undefined (reading 'addListener')
गड़बड़ी ठीक नहीं हुई: गड़बड़ी के अनिर्धारित मैसेज के गुण नहीं पढ़े जा सके
बिना गड़बड़ी वाला TypeError मैसेज.

हमने जो गड़बड़ी ठीक की थी उसे पहले जैसा करें. साथ ही, ऊपर दाएं कोने में मौजूद सभी मिटाएं पर क्लिक करें. इसके बाद, एक्सटेंशन को फिर से लोड करें.

सर्विस वर्कर की स्थिति देखना

आप नीचे दिए गए चरणों का पालन करके यह पहचान कर सकते हैं कि सर्विस वर्कर काम करने के लिए कब जागता है:

  1. "व्यू की जांच करें" के ऊपर मौजूद अपना एक्सटेंशन आईडी कॉपी करें.
    एक्सटेंशन मैनेजमेंट पेज में एक्सटेंशन आईडी
    एक्सटेंशन मैनेजमेंट पेज में एक्सटेंशन आईडी.
  2. ब्राउज़र में अपनी मेनिफ़ेस्ट फ़ाइल खोलें. उदाहरण के लिए: text chrome-extension://YOUR_EXTENSION_ID/manifest.json
  3. फ़ाइल की जांच करें.
  4. ऐप्लिकेशन पैनल पर जाएं.
  5. सर्विस वर्कर पैनल पर जाएं.

अपने कोड की जांच करने के लिए, स्थिति के आगे दिए गए लिंक से सर्विस वर्कर को शुरू या बंद करें.

ऐप्लिकेशन पैनल में सर्विस वर्कर की स्थिति
ऐप्लिकेशन पैनल में सर्विस वर्कर की स्थिति. (इमेज को बड़ा करने के लिए क्लिक करें.)

साथ ही, अगर आपने सर्विस वर्कर कोड में बदलाव किए हैं, तो बदलावों को तुरंत लागू करने के लिए, अपडेट करें या स्किप इंतजार पर क्लिक करें.

ऐप्लिकेशन पैनल में सर्विस वर्कर की स्थिति
ऐप्लिकेशन पैनल में सर्विस वर्कर को रीफ़्रेश करना. (इमेज को बड़ा करने के लिए क्लिक करें.)

पॉप-अप को डीबग करें

एक्सटेंशन अब सही तरीके से शुरू हो जाता है, तो आइए नीचे दी गई हाइलाइट की गई लाइनों पर टिप्पणी करके पॉप-अप को ब्रेक करें:

popup.js:

...
changeColorButton.addEventListener('click', (event) => {
  const color = event.target.value;

  // Query the active tab before injecting the content script
  chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { 
    // Use the Scripting API to execute a script
    chrome.scripting.executeScript({
      target: { tabId: tabs[0].id },
      args: [color],
      func: setColor
    });
  });
});

एक्सटेंशन मैनेजमेंट पेज पर वापस जाएं. गड़बड़ियां बटन फिर से दिखने लगता है. नया लॉग देखने के लिए इस पर क्लिक करें. इसमें गड़बड़ी का यह मैसेज दिखता है:

Uncaught ReferenceError: tabs is not defined
एक्सटेंशन मैनेजमेंट पेज, पॉप-अप गड़बड़ी दिखा रहा है
एक्सटेंशन मैनेजमेंट पेज, जिसमें पॉप-अप गड़बड़ी दिख रही है.

पॉप-अप की जांच करके, उसका DevTools खोला जा सकता है.

DevTools में पॉप-अप में गड़बड़ी दिख रही है.
DevTools में पॉप-अप से जुड़ी गड़बड़ी दिख रही है.

गड़बड़ी tabs is undefined का कहना है कि एक्सटेंशन को यह नहीं पता कि कॉन्टेंट स्क्रिप्ट को कहां इंजेक्ट करना है. इसे ठीक करने के लिए, tabs.query() पर कॉल करें और फिर ऐक्टिव टैब को चुनें.

कोड अपडेट करने के लिए, ऊपर दाएं कोने में मौजूद सभी मिटाएं बटन पर क्लिक करें. इसके बाद, एक्सटेंशन को फिर से लोड करें.

कॉन्टेंट स्क्रिप्ट डीबग करें

आइए, अब वैरिएबल "color" को "colors" में बदलकर कॉन्टेंट स्क्रिप्ट को बदलते हैं:

content.js:

...
function setColor(color) {
  // There's a typo in the line below;
  // ❌ colors should be ✅ color.
  document.body.style.backgroundColor = color;
  document.body.style.backgroundColor = colors;
}  

पेज को रीफ़्रेश करें, पॉप-अप खोलें और हरे बॉक्स पर क्लिक करें. कुछ नहीं होगा.

अगर आप एक्सटेंशन मैनेजमेंट पेज पर जाते हैं, तो गड़बड़ियां बटन नहीं दिखता है. इसकी वजह यह है कि एक्सटेंशन मैनेजमेंट पेज पर सिर्फ़ रनटाइम की गड़बड़ियां, console.warning, और console.error रिकॉर्ड की जाती हैं.

कॉन्टेंट स्क्रिप्ट वेबसाइट के अंदर चलती हैं. इन गड़बड़ियों को ढूंढने के लिए हमें उस वेब पेज की जांच करनी होगी जिसे एक्सटेंशन बदलने की कोशिश कर रहा है:

Uncaught ReferenceError: colors is not defined
वेब पेज कंसोल में एक्सटेंशन से जुड़ी गड़बड़ी
वेब पेज कंसोल में एक्सटेंशन से जुड़ी गड़बड़ी दिख रही है.

कॉन्टेंट स्क्रिप्ट में से DevTools का इस्तेमाल करने के लिए, सबसे ऊपर के बगल में मौजूद ड्रॉपडाउन ऐरो पर क्लिक करें और एक्सटेंशन चुनें.

पहचान में न आने वाली सूचना की गड़बड़ी: रंग की जानकारी का न होना
ध्यान न देने वाली समस्या का रेफ़रंस: रंग की जानकारी नहीं दी गई है.

गड़बड़ी का मैसेज है कि colors के बारे में नहीं बताया गया है. एक्सटेंशन को वैरिएबल को सही तरीके से पास नहीं करना चाहिए. कलर वैरिएबल को कोड में भेजने के लिए, इंजेक्ट की गई स्क्रिप्ट में सुधार करें.

नेटवर्क अनुरोधों पर नज़र रखना

अक्सर, पॉप-अप, नेटवर्क के सभी ज़रूरी अनुरोध करता है. डेवलपर, डेवलपर के DevTools खोलने से पहले ही ऐसा कर देते हैं. इन अनुरोधों को देखने के लिए, नेटवर्क पैनल के अंदर से रीफ़्रेश करें. यह DevTools पैनल बंद किए बिना, पॉप-अप को फिर से लोड करता है.

पॉप-अप नेटवर्क के अनुरोधों को देखने के लिए, नेटवर्क पैनल के अंदर रीफ़्रेश करें
पॉप-अप नेटवर्क के अनुरोधों को देखने के लिए, नेटवर्क पैनल को रीफ़्रेश करें.

अनुमतियों का एलान करें

कुछ एक्सटेंशन एपीआई को अनुमतियों की ज़रूरत होती है. यह पक्का करने के लिए कि कोई एक्सटेंशन मेनिफ़ेस्ट में सही अनुमतियों का अनुरोध कर रहा है, अनुमतियां लेख और Chrome एपीआई देखें.

  {
    "name": "Broken Background Color",
    ...
    "permissions": [
      "activeTab",
      "declarativeContent",
      "storage"
    ],
  ...
  }

इसके बारे में और पढ़ें

इस दस्तावेज़ को पढ़कर, Chrome Devtools के बारे में ज़्यादा जानें.