# ब्राउज़र एक्सटेंशन प्रोजेक्ट भाग 1: ब्राउज़र्स के बारे में सब कुछ ```mermaid journey title आपके ब्राउज़र एक्सटेंशन विकास यात्रा section Foundation समझें ब्राउज़र: 3: Student एक्सटेंशन प्रकार सीखें: 4: Student विकास सेटअप करें: 4: Student section Development इंटरफ़ेस बनाएं: 4: Student कार्यक्षमता जोड़ें: 5: Student डेटा संभालें: 5: Student section Integration ब्राउज़र में परीक्षण करें: 5: Student मुद्दों का डिबग करें: 4: Student अनुभव को पॉलिश करें: 5: Student ```  > स्केचनोट द्वारा [Wassim Chegham](https://dev.to/wassimchegham/ever-wondered-what-happens-when-you-type-in-a-url-in-an-address-bar-in-a-browser-3dob) ## प्री-लेक्चर क्विज़ [प्री-लेक्चर क्विज़](https://ff-quizzes.netlify.app/web/quiz/23) ### परिचय ब्राउज़र एक्सटेंशन्स छोटे-छोटे अनुप्रयोग होते हैं जो आपके वेब ब्राउज़िंग अनुभव को बेहतर बनाते हैं। जैसे टिम बर्नर्स-ली की मूल कल्पना एक इंटरैक्टिव वेब की थी, एक्सटेंशन्स ब्राउज़र की क्षमताओं को केवल साधारण दस्तावेज़ देखने से आगे बढ़ाते हैं। पासवर्ड प्रबंधकों से जो आपके खातों को सुरक्षित रखते हैं तक रंग चयनकों तक, जो डिजाइनरों को सही रंग लेने में मदद करते हैं, एक्सटेंशन्स रोज़मर्रा की ब्राउज़िंग चुनौतियों का समाधान करते हैं। आपका पहला एक्सटेंशन बनाने से पहले, चलिए समझते हैं कि ब्राउज़र कैसे काम करते हैं। जैसे अलेक्जेंडर ग्राहम बेल को टेलीफोन आविष्कार करने से पहले ध्वनि संचरण समझना ज़रूरी था, वैसे ही ब्राउज़र के मूल सिद्धांत जानना आपको एक्सटेंशन्स बनाने में मदद करेगा जो मौजूदा ब्राउज़र सिस्टम के साथ सुचारू रूप से काम करें। इस पाठ के अंत तक, आप ब्राउज़र आर्किटेक्चर समझेंगे और अपना पहला एक्सटेंशन बनाना शुरू कर देंगे। ```mermaid mindmap root((ब्राउज़र संरचना)) Core Components Rendering Engine JavaScript Engine Network Stack Storage APIs User Interface पता बार टैब प्रबंधन बुकमार्क्स एक्सटेंशन आइकन Extension System मैनिफेस्ट फाइल्स कंटेंट स्क्रिप्ट्स बैकग्राउंड पेज पॉपअप विंडोज़ Security Model समान-उत्पत्ति नीति अनुमतियाँ API सामग्री सुरक्षा पृथक दुनिया Development Tools DevTools एकीकरण डिबग कंसोल प्रदर्शन मॉनिटर एक्सटेंशन निरीक्षक ``` ## वेब ब्राउज़र्स को समझना वेब ब्राउज़र मूल रूप से एक परिष्कृत दस्तावेज़ व्याख्याता होता है। जब आप पता पट्टी में "google.com" टाइप करते हैं, तो ब्राउज़र कई जटिल चरणों को पूरा करता है - दुनिया भर के सर्वरों से सामग्री का अनुरोध करना, फिर उस कोड को पार्स और रेंडर करना ताकि आप इंटरैक्टिव वेब पृष्ठ देख सकें। यह प्रक्रिया उसी तरह है जैसे पहला वेब ब्राउज़र, WorldWideWeb, 1990 में टिम बर्नर्स-ली द्वारा डिज़ाइन किया गया था ताकि हाइपरलिंक्ड दस्तावेज़ सभी के लिए सुलभ हों। ✅ **थोड़ा इतिहास**: पहला ब्राउज़र 'WorldWideWeb' था और इसे सर टिमोथी बर्नर्स-ली ने 1990 में बनाया था।  > कुछ शुरुआती ब्राउज़र्स, द्वारा [Karen McGrane](https://www.slideshare.net/KMcGrane/week-4-ixd-history-personal-computing) ### ब्राउज़र्स वेब सामग्री को कैसे प्रोसेस करते हैं यूआरएल दर्ज करने और webpage देखने के बीच की प्रक्रिया में कई समन्वित चरण होते हैं जो सेकंडों में होते हैं: ```mermaid sequenceDiagram participant User participant Browser participant Extension participant DNS participant Server User->>Browser: URL टाइप करता है और Enter दबाता है Browser->>Extension: beforeRequest इवेंट ट्रिगर करें Extension->>Extension: जांचें कि URL में संशोधन की आवश्यकता है या नहीं Browser->>DNS: सर्वर IP पता खोजता है DNS->>Browser: IP पता लौटाता है Browser->>Server: वेब पेज सामग्री के लिए अनुरोध करता है Server->>Browser: HTML, CSS, और JavaScript भेजता है Browser->>Extension: beforeResponse इवेंट ट्रिगर करें Extension->>Extension: आवश्यक होने पर सामग्री संशोधित करें Browser->>User: पूरा वेब पेज रेंडर करता है Extension->>User: एक्सटेंशन UI अपडेट दिखाता है ``` **यह प्रक्रिया क्या करती है:** - **मानव-पठनीय** URL को DNS लुकअप के ज़रिए सर्वर IP एड्रेस में ट्रांसलेट करता है - **HTTP या HTTPS प्रोटोकॉल** का उपयोग कर वेब सर्वर के साथ सुरक्षित कनेक्शन स्थापित करता है - सर्वर से विशिष्ट वेब पेज सामग्री **अनुरोध करता है** - सर्वर से HTML मार्कअप, CSS स्टाइलिंग, और जावास्क्रिप्ट कोड **प्राप्त करता है** - सभी सामग्री को उस इंटरैक्टिव वेब पेज में **रेंडर करता है** जिसे आप देखते हैं ### ब्राउज़र के मुख्य फीचर्स आधुनिक ब्राउज़र कई सुविधाएं प्रदान करते हैं जिनका उपयोग एक्सटेंशन डेवलपर्स कर सकते हैं: | फीचर | उद्देश्य | एक्सटेंशन के अवसर | |---------|---------|------------------------| | **रेंडरिंग इंजन** | HTML, CSS, और जावास्क्रिप्ट दिखाना | सामग्री संशोधन, स्टाइलिंग इनजेक्शन | | **जावास्क्रिप्ट इंजन** | जावास्क्रिप्ट कोड चलाना | कस्टम स्क्रिप्ट्स, API इंटरैक्शन | | **लोकल स्टोरेज** | डेटा स्थानीय रूप से सहेजना | उपयोगकर्ता प्राथमिकताएं, कैश्ड डेटा | | **नेटवर्क स्टैक** | वेब अनुरोधों को संभालना | अनुरोध मॉनिटरिंग, डेटा विश्लेषण | | **सुरक्षा मॉडल** | उपयोगकर्ताओं को हानिकारक सामग्री से सुरक्षा | सामग्री फ़िल्टरिंग, सुरक्षा संवर्द्धन | **इन फीचर्स को समझने से आप:** - अपने एक्सटेंशन के लिए सबसे अधिक मूल्य कहां जोड़ सकते हैं, **पहचान सकते हैं** - अपने एक्सटेंशन की कार्यक्षमता के लिए सही ब्राउज़र API चुन सकते हैं - ब्राउज़र सिस्टम के साथ कुशलतापूर्वक काम करने वाले एक्सटेंशन्स डिजाइन कर सकते हैं - यह सुनिश्चित कर सकते हैं कि आपका एक्सटेंशन ब्राउज़र की सुरक्षा सर्वोत्तम प्रथाओं का पालन करता है ### क्रॉस-ब्राउज़र डेवलपमेंट विचार अलग-अलग ब्राउज़र मानकों को थोड़े-बहुत भिन्न तरीकों से लागू करते हैं, जैसे अलग-अलग प्रोग्रामिंग भाषाएं एक ही एल्गोरिदम को अलग तरह से संभालती हैं। Chrome, Firefox, और Safari के अलग-अलग गुण होते हैं जिनका विकास करते समय ध्यान रखना होता है। > 💡 **प्रो टिप**: यह जांचने के लिए [caniuse.com](https://www.caniuse.com) का उपयोग करें कि विभिन्न ब्राउज़र्स में कौन सी वेब तकनीकें समर्थित हैं। यह आपके एक्सटेंशन की सुविधाओं की योजना बनाते समय बेहद मूल्यवान है! **एक्सटेंशन विकास के लिए प्रमुख विचार:** - अपने एक्सटेंशन का परीक्षण Chrome, Firefox, और Edge ब्राउज़रों पर करें - अलग-अलग ब्राउज़र एक्सटेंशन API और मेनिफेस्ट फॉर्मेट के अनुसार अनुकूलन करें - विभिन्न प्रदर्शन विशेषताओं और सीमाओं को संभालें - ब्राउज़र-विशिष्ट फीचर्स के लिए फ़ैल्बैक प्रदान करें जो उपलब्ध नहीं हो सकते ✅ **विश्लेषण सूझाव**: आप वेब विकास परियोजनाओं में एनालिटिक्स पैकेज इंस्टॉल करके जान सकते हैं कि आपके उपयोगकर्ता किस ब्राउज़र को प्राथमिकता देते हैं। यह डेटा पहले किन ब्राउज़रों का समर्थन करना चाहिए यह निर्धारित करने में आपकी मदद करता है। ## ब्राउज़र एक्सटेंशन्स को समझना ब्राउज़र एक्सटेंशन्स आम वेब ब्राउज़िंग चुनौतियों को हल करते हैं और ब्राउज़र इंटरफ़ेस में सीधे कार्यक्षमता जोड़ते हैं। अलग एप्लिकेशन या जटिल वर्कफ़्लोज़ की आवश्यकता के बजाय, एक्सटेंशन्स तुरंत उपकरणों और विशेषताओं तक पहुंच प्रदान करते हैं। यह अवधारणा इस तरह है जैसे प्रारंभिक कंप्यूटर पायनियर डगलस एंगलबार्ट ने तकनीक के माध्यम से मानव क्षमताओं को बढ़ाने का लक्ष्य रखा था - एक्सटेंशन्स आपके ब्राउज़र की मूल कार्यक्षमता को बढ़ाते हैं। ```mermaid quadrantChart title ब्राउज़र एक्सटेंशन श्रेणियां x-axis सरल --> जटिल y-axis व्यक्तिगत उपयोग --> पेशेवर उपकरण quadrant-1 डेवलपर टूल्स quadrant-2 एंटरप्राइज़ सॉल्यूशंस quadrant-3 व्यक्तिगत उपयोगिताएँ quadrant-4 उत्पादकता ऐप्स Ad Blockers: [0.3, 0.2] Password Managers: [0.7, 0.3] Color Pickers: [0.4, 0.8] Code Formatters: [0.8, 0.9] Note Taking: [0.6, 0.5] Video Downloaders: [0.5, 0.2] Time Trackers: [0.7, 0.6] Screenshot Tools: [0.4, 0.4] ``` **लोकप्रिय एक्सटेंशन श्रेणियां और उनके लाभ:** - **उत्पादकता उपकरण**: टास्क मैनेजर्स, नोट-लेने वाले ऐप्स, और समय ट्रैकर जो आपको संगठित रखते हैं - **सुरक्षा संवर्द्धन**: पासवर्ड मैनेजर, विज्ञापन ब्लॉकर्स, और गोपनीयता उपकरण जो आपके डेटा की सुरक्षा करते हैं - **डेवलपर टूल्स**: कोड फॉर्मेटर्स, रंग चयनकर्ता, और डिबगिंग यूटिलिटीज जो विकास को सुगम बनाते हैं - **सामग्री संवर्द्धन**: रीडिंग मोड, वीडियो डाउनलोडर, और स्क्रीनशॉट उपकरण जो आपके वेब अनुभव को बेहतर बनाते हैं ✅ **प्रतिबिंब प्रश्न**: आपके पसंदीदा ब्राउज़र एक्सटेंशन्स कौन से हैं? वे कौन से खास कार्य करते हैं, और वे आपके ब्राउज़िंग अनुभव को कैसे सुधारते हैं? ### 🔄 **शैक्षिक जांच** **ब्राउज़र आर्किटेक्चर समझना**: एक्सटेंशन विकास पर जाने से पहले यह सुनिश्चित करें कि आप: - ✅ समझा सकते हैं कि ब्राउज़र वेब अनुरोधों को कैसे प्रोसेस करते हैं और सामग्री कैसे रेंडर करते हैं - ✅ ब्राउज़र आर्किटेक्चर के मुख्य घटकों की पहचान कर सकते हैं - ✅ समझ सकते हैं कि एक्सटेंशन्स ब्राउज़र कार्यक्षमता के साथ कैसे एकीकृत होते हैं - ✅ पहचान सकते हैं कि उपयोगकर्ताओं की सुरक्षा के लिए सुरक्षा मॉडल कैसे काम करता है **त्वरित आत्म-परीक्षा**: क्या आप यूआरएल टाइप करने से लेकर वेबपेज देखने तक के रास्ते को समझा सकते हैं? 1. **DNS लुकअप** URL को IP एड्रेस में बदलता है 2. **HTTP अनुरोध** सर्वर से सामग्री प्राप्त करता है 3. **पार्सिंग** HTML, CSS, और जावास्क्रिप्ट को प्रोसेस करता है 4. **रेंडरिंग** अंतिम वेबपेज दिखाता है 5. **एक्सटेंशन्स** कई चरणों में सामग्री को संशोधित कर सकते हैं ## एक्सटेंशन्स इंस्टॉल और प्रबंधित करना एक्सटेंशन इंस्टॉलेशन प्रक्रिया को समझना आपको यह पूर्वानुमान लगाने में मदद करता है कि उपयोगकर्ता आपके एक्सटेंशन को इंस्टॉल करते समय क्या अनुभव करेंगे। इंस्टॉलेशन प्रक्रिया आधुनिक ब्राउज़रों में मानकीकृत है, इंटरफ़ेस डिज़ाइन में केवल मामूली अंतर होते हैं।  > **महत्वपूर्ण**: सुनिश्चित करें कि "डेवलपर मोड" चालू है और जब अपने एक्सटेंशन्स का परीक्षण कर रहे हों तो अन्य स्टोर से एक्सटेंशन्स की अनुमति दें। ### विकास एक्सटेंशन इंस्टॉलेशन प्रक्रिया जब आप अपने स्वयं के एक्सटेंशन्स विकसित और परीक्षण कर रहे हों, तो इस कार्यप्रवाह का पालन करें: ```mermaid flowchart TD A[कोड लिखें] --> B[एक्सटेंशन बनाएं] B --> C{पहली बार इंस्टॉल?} C -->|हाँ| D[अनपैक्ड लोड करें] C -->|नहीं| E[एक्सटेंशन पुनः लोड करें] D --> F[कार्यक्षमता का परीक्षण करें] E --> F F --> G{सही काम कर रहा है?} G -->|नहीं| H[समस्याओं का निवारण करें] G -->|हाँ| I[उपयोगकर्ताओं के लिए तैयार] H --> A I --> J[स्टोर में प्रकाशित करें] style A fill:#e1f5fe style F fill:#e8f5e8 style I fill:#f3e5f5 style J fill:#fff3e0 ``` ```bash # चरण 1: अपना एक्सटेंशन बनाएं npm run build ``` **यह कमांड क्या करता है:** - आपके स्रोत कोड को ब्राउज़र-तैयार फ़ाइलों में **कंपाइल करता है** - जावास्क्रिप्ट मॉड्यूल्स को ऑप्टिमाइज़्ड पैकेजों में **बंडल करता है** - `/dist` फ़ोल्डर में अंतिम एक्सटेंशन फ़ाइलें **जनरेट करता है** - आपके एक्सटेंशन को इंस्टॉल और परीक्षण के लिए **तैयार करता है** **चरण 2: ब्राउज़र एक्सटेंशन्स पर जाएं** 1. अपने ब्राउज़र के एक्सटेंशन्स प्रबंधन पृष्ठ को **खोलें** 2. ऊपर दाएं कोने में "सेटिंग्स और अन्य" बटन (`...` आइकन) पर **क्लिक करें** 3. ड्रॉपडाउन मेनू से "Extensions" चुनें **चरण 3: अपना एक्सटेंशन लोड करें** - **नई इंस्टॉलेशन्स के लिए**: `load unpacked` चुनें और अपनी `/dist` फ़ोल्डर का चयन करें - **अपडेट्स के लिए**: अपने पहले से इंस्टॉल किए एक्सटेंशन के पास `reload` पर क्लिक करें - **परीक्षण के लिए**: "डेवलपर मोड" को सक्षम करें ताकि अतिरिक्त डिबगिंग विकल्प मिल सकें ### प्रोडक्शन एक्सटेंशन इंस्टॉलेशन > ✅ **नोट**: ये विकास निर्देश केवल उन एक्सटेंशन्स के लिए हैं जिन्हें आप खुद बनाते हैं। प्रकाशित एक्सटेंशन्स इंस्टॉल करने के लिए आधिकारिक ब्राउज़र एक्सटेंशन स्टोर देखें जैसे [Microsoft Edge Add-ons store](https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home)। **फर्क को समझना:** - **विकास इंस्टॉलेशन्स** आपको विकास के दौरान अप्रकाशित एक्सटेंशन्स का परीक्षण करने देते हैं - **स्टोर इंस्टॉलेशन्स** स्वीकृत, प्रकाशित एक्सटेंशन्स होते हैं जिनमें स्वचालित अपडेट्स होते हैं - **साइडलोडिंग** आधिकारिक स्टोर के बाहर से एक्सटेंशन्स इंस्टॉल करने की अनुमति देता है (डेवलपर मोड आवश्यक) ## अपना कार्बन फुटप्रिंट एक्सटेंशन बनाना हम एक ऐसा ब्राउज़र एक्सटेंशन बनाएंगे जो आपके क्षेत्र के ऊर्जा उपयोग के कार्बन फुटप्रिंट को प्रदर्शित करता है। यह परियोजना एक्सटेंशन विकास की मौलिक अवधारणाओं को दर्शाती है और पर्यावरण जागरूकता के लिए एक व्यावहारिक उपकरण बनाती है। यह दृष्टिकोण "करके सीखने" के सिद्धांत का अनुसरण करता है, जो जॉन ड्यूवी की शैक्षिक थ्योरी से प्रभावी साबित हुआ है - तकनीकी कौशल को सार्थक वास्तविक दुनिया के अनुप्रयोगों के साथ जोड़ना। ### परियोजना आवश्यकताएं विकास शुरू करने से पहले, आवश्यक संसाधनों और निर्भरताओं को एकत्र करें: **आवश्यक API एक्सेस:** - **[CO2 Signal API key](https://www.co2signal.com/)**: अपनी ईमेल दर्ज करें और अपना मुफ्त API key प्राप्त करें - **[Region code](http://api.electricitymap.org/v3/zones)**: [Electricity Map](https://www.electricitymap.org/map) से अपने क्षेत्र का कोड खोजें (उदाहरण के लिए, बोस्टन का कोड 'US-NEISO' है) **डेवलपमेंट टूल्स:** - **[Node.js और NPM](https://www.npmjs.com)**: परियोजना निर्भरताओं को इंस्टॉल करने के लिए पैकेज प्रबंधन टूल - **[स्टार्टर कोड](../../../../5-browser-extension/start)**: विकास शुरू करने के लिए `start` फ़ोल्डर डाउनलोड करें ✅ **अधिक जानें**: पैकेज प्रबंधन कौशल बढ़ाने के लिए यह [व्यापक Learn मॉड्यूल](https://docs.microsoft.com/learn/modules/create-nodejs-project-dependencies/?WT.mc_id=academic-77807-sagibbon) देखें ### परियोजना संरचना को समझना परियोजना की संरचना को समझना विकास कार्य को प्रभावी ढंग से व्यवस्थित करने में मदद करता है। जैसे कि अलेक्जेंड्रिया की लाइब्रेरी को ज्ञान पुनःप्राप्ति के लिए व्यवस्थित किया गया था, वैसे ही एक सुव्यवस्थित कोडबेस विकास को अधिक कुशल बनाता है: ``` project-root/ ├── dist/ # Built extension files │ ├── manifest.json # Extension configuration │ ├── index.html # User interface markup │ ├── background.js # Background script functionality │ └── main.js # Compiled JavaScript bundle ├── src/ # Source development files │ └── index.js # Your main JavaScript code ├── package.json # Project dependencies and scripts └── webpack.config.js # Build configuration ``` **प्रत्येक फ़ाइल क्या करती है:** - **`manifest.json`**: एक्सटेंशन मेटाडेटा, अनुमतियों, और प्रवेश बिंदुओं को परिभाषित करता है - **`index.html`**: उस यूजर इंटरफ़ेस को बनाता है जो उपयोगकर्ताओं द्वारा एक्सटेंशन पर क्लिक करने पर दिखाई देता है - **`background.js`**: पृष्ठभूमि कार्यों और ब्राउज़र इवेंट लिस्नर्स को संभालता है - **`main.js`**: बिल्ड प्रक्रिया के बाद अंतिम बंडल्ड जावास्क्रिप्ट होता है - **`src/index.js`**: आपका मुख्य विकास कोड जिसमें से `main.js` बनाया जाता है > 💡 **संगठन टिप**: विकास के दौरान आसान संदर्भ के लिए अपनी API key और क्षेत्र कोड को एक सुरक्षित नोट में स्टोर करें। आपको इन्हें अपने एक्सटेंशन की कार्यक्षमता का परीक्षण करने के लिए चाहिए होगा। ✅ **सुरक्षा नोट**: API keys या संवेदनशील क्रेडेंशियल्स को कभी भी अपने कोड रिपॉजिटरी में कमिट न करें। हम अगली स्टेप्स में इनको सुरक्षित रखने के तरीके दिखाएंगे। ## एक्सटेंशन इंटरफ़ेस बनाना अब हम यूजर इंटरफ़ेस घटक बनाएंगे। यह एक्सटेंशन दो स्क्रीन वाला 접근 अपनाता है: शुरूआती सेटअप के लिए एक कॉन्फ़िगरेशन स्क्रीन और डेटा डिस्प्ले के लिए एक परिणाम स्क्रीन। यह इंटरफ़ेस डिज़ाइन में प्रयुक्त प्रोग्रेसिव डिसक्लोज़र सिद्धांत का पालन करता है - जानकारी और विकल्पों को क्रमबद्ध रूप से खोलना ताकि उपयोगकर्ता अभिभूत न हों। ### एक्सटेंशन व्यूज़ का अवलोकन **सेटअप व्यू** - पहली बार उपयोगकर्ता की कॉन्फ़िगरेशन:  **परिणाम व्यू** - कार्बन पदचिह्न डेटा प्रदर्शन:  ### कॉन्फ़िगरेशन फॉर्म बनाना सेटअप फॉर्म पहली बार उपयोग के दौरान उपयोगकर्ता कॉन्फ़िगरेशन डेटा जमा करता है। सेटअप पूरा होने पर यह जानकारी ब्राउज़र स्टोरेज में भविष्य के सत्रों के लिए बनी रहती है। `/dist/index.html` फ़ाइल में इस फॉर्म संरचना को जोड़ें: ```html
``` **यह फॉर्म क्या करता है:** - उचित लेबल और इनपुट संबधों के साथ एक सैमान्टिक फॉर्म संरचना बनाता है - बेहतर उपयोगकर्ता अनुभव के लिए ब्राउज़र ऑटोकंप्लीट सुविधा सक्षम करता है - सबमिशन से पहले दोनों फ़ील्ड भरना आवश्यक करता है (`required` एट्रिब्यूट का उपयोग) - आसान स्टाइलिंग और जावास्क्रिप्ट टार्गेटिंग के लिए इनपुट को वर्णनात्मक क्लास नामों से व्यवस्थित करता है - उपयोगकर्ताओं को जो पहली बार एक्सटेंशन सेट कर रहे हैं, उन्हें स्पष्ट निर्देश प्रदान करता है ### परिणाम प्रदर्शित करना बनाना अगले, परिणाम क्षेत्र बनाएँ जो कार्बन फुटप्रिंट डेटा दिखाएगा। फॉर्म के नीचे यह HTML जोड़ें: ```htmlRegion:
Carbon Usage:
Fossil Fuel Percentage: