# Browser Extension Project Part 1: Vše o prohlížečích ```mermaid journey title Vaše cesta vývoje rozšíření prohlížeče section Základy Pochopit prohlížeče: 3: Student Naučit se typy rozšíření: 4: Student Nastavit vývojové prostředí: 4: Student section Vývoj Vytvořit rozhraní: 4: Student Přidat funkce: 5: Student Zpracovat data: 5: Student section Integrace Testovat v prohlížeči: 5: Student Ladit problémy: 4: Student Vylepšit uživatelský zážitek: 5: Student ```  > Sketchnote od [Wassim Chegham](https://dev.to/wassimchegham/ever-wondered-what-happens-when-you-type-in-a-url-in-an-address-bar-in-a-browser-3dob) ## Přednáškový kvíz [Přednáškový kvíz](https://ff-quizzes.netlify.app/web/quiz/23) ### Úvod Prohlížečové rozšíření jsou miniaplikace, které vylepšují váš zážitek z prohlížení webu. Podobně jako původní vize Tima Berners-Lee pro interaktivní web, rozšíření rozšiřují schopnosti prohlížeče mimo pouhé zobrazování dokumentů. Od správců hesel, kteří udržují vaše účty v bezpečí, až po výběr barev, který pomáhá designérům získat dokonalé odstíny, rozšíření řeší každodenní výzvy při prohlížení. Než začneme stavět vaše první rozšíření, pojďme pochopit, jak prohlížeče fungují. Stejně jako Alexander Graham Bell potřeboval porozumět přenosu zvuku, než vynalezl telefon, znalost základů prohlížečů vám pomůže vytvářet rozšíření, která se hladce integrují do existujících systémů prohlížeče. Na konci této lekce porozumíte architektuře prohlížeče a začnete stavět své první rozšíření. ```mermaid mindmap root((Architektura prohlížeče)) Core Components Rendering Engine JavaScript Engine Network Stack Storage APIs User Interface Adresní řádek Správa panelů Záložky Ikony rozšíření Extension System Manifest Files Content Scripts Background Pages Popup Windows Security Model Same-Origin Policy Permissions API Content Security Isolated Worlds Development Tools DevTools Integration Debug Console Performance Monitor Extension Inspector ``` ## Porozumění webovým prohlížečům Webový prohlížeč je v podstatě sofistikovaný interpret dokumentů. Když zadáte „google.com“ do adresního řádku, prohlížeč provede složitou řadu operací – požádá o obsah ze serverů po celém světě, poté tento kód zanalyzuje a vykreslí do interaktivních webových stránek, které vidíte. Tento proces odráží, jak byl první webový prohlížeč, WorldWideWeb, navržen Timem Berners-Leem v roce 1990, aby zpřístupnil hypertextové dokumenty všem. ✅ **Trocha historie**: První prohlížeč se jmenoval 'WorldWideWeb' a vytvořil ho Sir Timothy Berners-Lee v roce 1990.  > Některé rané prohlížeče, podle [Karen McGrane](https://www.slideshare.net/KMcGrane/week-4-ixd-history-personal-computing) ### Jak prohlížeče zpracovávají webový obsah Proces mezi zadáním URL a zobrazením webové stránky zahrnuje několik koordinovaných kroků, které probíhají během sekund: ```mermaid sequenceDiagram participant User participant Browser participant Extension participant DNS participant Server User->>Browser: Zadá URL a stiskne Enter Browser->>Extension: Spustí událost beforeRequest Extension->>Extension: Zkontroluje, zda je třeba URL upravit Browser->>DNS: Vyhledá IP adresu serveru DNS->>Browser: Vrátí IP adresu Browser->>Server: Požádá o obsah webové stránky Server->>Browser: Odesílá HTML, CSS a JavaScript Browser->>Extension: Spustí událost beforeResponse Extension->>Extension: Upravit obsah, pokud je potřeba Browser->>User: Vykreslí kompletní webovou stránku Extension->>User: Zobrazí aktualizace UI rozšíření ``` **Tento proces provádí:** - **Překládá** lidsky čitelnou URL na IP adresu serveru pomocí DNS dotazu - **Navazuje** zabezpečené spojení s webovým serverem pomocí protokolů HTTP nebo HTTPS - **Požaduje** specifický obsah webové stránky ze serveru - **Přijímá** HTML značky, CSS styly a JavaScriptový kód ze serveru - **Vykresluje** veškerý obsah do interaktivní webové stránky, kterou vidíte ### Hlavní funkce prohlížeče Moderní prohlížeče poskytují řadu funkcí, které mohou vývojáři rozšíření využít: | Funkce | Účel | Příležitosti pro rozšíření | |---------|---------|------------------------| | **Rendering Engine** | Zobrazuje HTML, CSS a JavaScript | Úpravy obsahu, injektování stylů | | **JavaScript Engine** | Spouští JavaScriptový kód | Vlastní skripty, API interakce | | **Lokální úložiště** | Ukládá data lokálně | Uživatelská nastavení, cache | | **Síťová vrstva** | Řídí webové požadavky | Monitorování požadavků, analýza dat | | **Bezpečnostní model** | Chrání uživatele před škodlivým obsahem | Filtrování obsahu, bezpečnostní vylepšení | **Porozumění těmto funkcím vám pomůže:** - **Identifikovat** kde může vaše rozšíření přinést největší užitek - **Vybrat** správné API prohlížeče pro funkčnost vašeho rozšíření - **Navrhnout** rozšíření, která efektivně spolupracují se systémem prohlížeče - **Zajistit**, že vaše rozšíření dodržuje nejlepší bezpečnostní praktiky ### Úvahy o vývoji napříč prohlížeči Různé prohlížeče implementují standardy s drobnými odchylkami, podobně jako různé programovací jazyky mohou odlišně zpracovávat stejný algoritmus. Chrome, Firefox a Safari mají jedinečné charakteristiky, které musí vývojáři brát v úvahu během vývoje rozšíření. > 💡 **Užitečný tip**: Použijte [caniuse.com](https://www.caniuse.com) k ověření, které webové technologie jsou podporovány v různých prohlížečích. To je neocenitelné při plánování funkcí vašeho rozšíření! **Klíčové úvahy pro vývoj rozšíření:** - **Testujte** své rozšíření v prohlížečích Chrome, Firefox a Edge - **Přizpůsobte** se rozdílům v API rozšíření a formátech manifestu - **Zvládejte** různou výkonnost a omezení - **Poskytněte** náhradní řešení pro specifické funkce prohlížeče, které nemusí být dostupné ✅ **Insight z analýzy**: Můžete zjistit, které prohlížeče vaši uživatelé preferují, instalací analytických balíčků ve svých webových projektech. Tato data vám pomohou určit, které prohlížeče podporovat prioritně. ## Porozumění prohlížečovým rozšířením Rozšíření prohlížeče řeší běžné problémy při prohlížení webu přidáním funkcí přímo do rozhraní prohlížeče. Místo potřeby samostatných aplikací nebo složitých pracovních postupů poskytují rozšíření okamžitý přístup k nástrojům a funkcím. Tento koncept odráží, jak raní průkopníci počítačů jako Douglas Engelbart představovali rozšíření lidských schopností technologií – rozšíření zdokonalují základní funkčnost vašeho prohlížeče. ```mermaid quadrantChart title Kategorie rozšíření prohlížeče x-axis Jednoduché --> Složité y-axis Osobní použití --> Profesionální nástroje quadrant-1 Nástroje pro vývojáře quadrant-2 Firemní řešení quadrant-3 Osobní užitečné nástroje quadrant-4 Aplikace pro produktivitu 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] ``` **Populární kategorie rozšíření a jejich přínosy:** - **Nástroje produktivity**: Správci úkolů, aplikace pro poznámky a časovače, které pomáhají udržet pořádek - **Bezpečnostní vylepšení**: Správci hesel, blokátory reklam a nástroje na ochranu soukromí, které chrání vaše data - **Nástroje pro vývojáře**: Formátovače kódu, výběry barev a ladicí pomůcky, které zjednodušují vývoj - **Vylepšení obsahu**: Režimy čtení, stahovače videí a nástroje pro snímky obrazovky, které zlepšují váš zážitek z webu ✅ **Reflexní otázka**: Jaká jsou vaše oblíbená rozšíření? Jaké konkrétní úkoly vykonávají a jak zlepšují váš zážitek z prohlížení? ### 🔄 **Pedagogická kontrola** **Porozumění architektuře prohlížeče**: Než přistoupíte k vývoji rozšíření, ujistěte se, že umíte: - ✅ Vysvětlit, jak prohlížeče zpracovávají webové požadavky a vykreslují obsah - ✅ Identifikovat hlavní komponenty architektury prohlížeče - ✅ Rozumět, jak se rozšíření integrují s funkcionalitou prohlížeče - ✅ Rozpoznat bezpečnostní model, který uživatele chrání **Rychlý autotest**: Dokážete sledovat cestu od zadání URL až po zobrazení webové stránky? 1. **DNS dotaz** převádí URL na IP adresu 2. **HTTP požadavek** získává obsah ze serveru 3. **Zpracování** analyzuje HTML, CSS a JavaScript 4. **Vykreslení** zobrazuje finální webovou stránku 5. **Rozšíření** mohou obsah upravit na několika krocích ## Instalace a správa rozšíření Porozumění procesu instalace rozšíření vám pomůže předvídat uživatelský zážitek při instalaci vašeho rozšíření. Proces instalace je standardizovaný v moderních prohlížečích s drobnými rozdíly v designu rozhraní.  > **Důležité**: Při testování vlastních rozšíření nezapomeňte zapnout režim vývojáře a povolit rozšíření z jiných obchodů. ### Vývojový proces instalace rozšíření Když vyvíjíte a testujete vlastní rozšíření, postupujte podle tohoto pracovního toku: ```mermaid flowchart TD A[Napište kód] --> B[Sestavte rozšíření] B --> C{První instalace?} C -->|Ano| D[Nahrajte nerozbalené] C -->|Ne| E[Znovu načíst rozšíření] D --> F[Testujte funkčnost] E --> F F --> G{Funguje správně?} G -->|Ne| H[Opravte chyby] G -->|Ano| I[Připraveno pro uživatele] H --> A I --> J[Publikovat do obchodu] style A fill:#e1f5fe style F fill:#e8f5e8 style I fill:#f3e5f5 style J fill:#fff3e0 ``` ```bash # Krok 1: Vytvořte své rozšíření npm run build ``` **Co tento příkaz provádí:** - **Komplikuje** váš zdrojový kód do souborů připravených pro prohlížeč - **Kombinuje** JavaScriptové moduly do optimalizovaných balíčků - **Vytváří** finální soubory rozšíření ve složce `/dist` - **Připravuje** vaše rozšíření k instalaci a testování **Krok 2: Přejděte do správy rozšíření v prohlížeči** 1. **Otevřete** stránku správy rozšíření ve svém prohlížeči 2. **Klikněte** na tlačítko "Nastavení a další" (ikona `...`) vpravo nahoře 3. **Vyberte** "Rozšíření" v rozbalovací nabídce **Krok 3: Načtěte své rozšíření** - **Pro nové instalace**: Vyberte `load unpacked` a vyberte složku `/dist` - **Pro aktualizace**: Klikněte na `reload` vedle již nainstalovaného rozšíření - **Pro testování**: Zapněte "Režim vývojáře" pro přístup k dalším ladicím možnostem ### Instalace rozšíření pro produkci > ✅ **Poznámka**: Tyto vývojové instrukce jsou určeny pro rozšíření, která vytváříte sami. Pro instalaci publikovaných rozšíření navštivte oficiální obchody s rozšířeními jako [Microsoft Edge Add-ons store](https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home). **Rozdíl mezi nimi:** - **Vývojové instalace** umožňují testovat nevydaná rozšíření během vývoje - **Instalace z obchodu** poskytují ověřená, publikovaná rozšíření s automatickými aktualizacemi - **Sideloading** umožňuje instalaci rozšíření mimo oficiální obchody (vyžaduje režim vývojáře) ## Stavíme rozšíření pro uhlíkovou stopu Vytvoříme rozšíření prohlížeče, které zobrazuje uhlíkovou stopu využití energie ve vaší oblasti. Tento projekt demonstruje základní principy vývoje rozšíření a zároveň představuje praktický nástroj pro environmentální povědomí. Tento přístup následuje princip „učení praxí“, který se osvědčil již od John Deweyho vzdělávacích teorií – kombinace technických dovedností s významnými reálnými aplikacemi. ### Požadavky projektu Než začnete vývoj, shromážděme potřebné zdroje a závislosti: **Požadovaný přístup k API:** - **[CO2 Signal API klíč](https://www.co2signal.com/)**: Zadejte svou e-mailovou adresu pro bezplatný API klíč - **[Kód regionu](http://api.electricitymap.org/v3/zones)**: Najděte kód vašeho regionu pomocí [Electricity Map](https://www.electricitymap.org/map) (například Boston používá „US-NEISO“) **Vývojové nástroje:** - **[Node.js a NPM](https://www.npmjs.com)**: Nástroj pro správu balíčků pro instalaci závislostí projektu - **[Výchozí kód](../../../../5-browser-extension/start)**: Stáhněte si složku `start` pro zahájení vývoje ✅ **Více se naučíte**: Zlepšete své schopnosti správy balíčků pomocí tohoto [komplexního Learn modulu](https://docs.microsoft.com/learn/modules/create-nodejs-project-dependencies/?WT.mc_id=academic-77807-sagibbon) ### Porozumění struktuře projektu Shrnutí struktury projektu pomáhá efektivně organizovat práci na vývoji. Podobně jako Alexandrijská knihovna byla organizována pro snadný přístup k vědomostem, dobře strukturovaná kódová báze zefektivňuje vývoj: ``` 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 ``` **Co každý soubor dělá:** - **`manifest.json`**: **Definuje** metadata rozšíření, oprávnění a vstupní body - **`index.html`**: **Vytváří** uživatelské rozhraní, které se zobrazí po kliknutí na rozšíření - **`background.js`**: **Řídí** úlohy na pozadí a posluchače událostí prohlížeče - **`main.js`**: **Obsahuje** finální sloučený JavaScript po sestavení - **`src/index.js`**: **Obsahuje** hlavní vývojový kód, který se zkompiluje do `main.js` > 💡 **Tip pro organizaci**: Uložte si svůj API klíč a kód regionu v zabezpečené poznámce pro snadnou referenci během vývoje. Budete je potřebovat k testování funkčnosti rozšíření. ✅ **Bezpečnostní poznámka**: Nikdy nesdílejte API klíče nebo citlivé přihlašovací údaje ve vašem repozitáři kódu. Ukážeme vám, jak s nimi bezpečně pracovat v dalších krocích. ## Vytváření rozhraní rozšíření Nyní sestavíme komponenty uživatelského rozhraní. Rozšíření používá dvouscreenový přístup: konfigurační obrazovku pro počáteční nastavení a výsledkovou obrazovku pro zobrazení dat. Toto následuje princip postupného odhalování v designu rozhraní používaný od raných dob počítačů – odhalování informací a možností v logickém pořadí, aby uživatelé nebyli přetíženi. ### Přehled zobrazení rozšíření **Nastavení** - konfigurace prvního použití:  **Výsledky** - zobrazení dat uhlíkové stopy:  ### Vytvoření konfiguračního formuláře Formulář pro nastavení sbírá konfigurační údaje uživatele během prvního použití. Po nastavení jsou tyto informace uloženy do úložiště prohlížeče pro další session. V souboru `/dist/index.html` přidejte tuto strukturu formuláře: ```html
``` **Co tento formulář dělá:** - **Vytváří** sémantickou strukturu formuláře s odpovídajícími štítky a asociacemi vstupů - **Povoluje** automatické doplňování prohlížečem pro lepší uživatelský zážitek - **Požaduje** vyplnění obou polí před odesláním pomocí atributu `required` - **Organizuje** vstupy pomocí popisných názvů tříd pro snadné styly a cílení JavaScriptu - **Poskytuje** jasné instrukce uživatelům, kteří nastavují rozšíření poprvé ### Vytváření zobrazení výsledků Dále vytvořte oblast pro výsledky, která bude zobrazovat data o uhlíkové stopě. Přidejte tento HTML pod formulář: ```htmlRegion:
Carbon Usage:
Fossil Fuel Percentage: