# Razširitev brskalnika, projekt del 1: Vse o brskalnikih ```mermaid journey title Vaša pot razvoja brskalniške razširitve section Osnove Razumite brskalnike: 3: Student Spoznajte vrste razširitev: 4: Student Nastavite razvojno okolje: 4: Student section Razvoj Zgradite vmesnik: 4: Student Dodajte funkcionalnost: 5: Student Obdelajte podatke: 5: Student section Integracija Testirajte v brskalniku: 5: Student Odpravljajte napake: 4: Student Izboljšajte izkušnjo: 5: Student ```  > Sketchnote avtorja [Wassim Chegham](https://dev.to/wassimchegham/ever-wondered-what-happens-when-you-type-in-a-url-in-an-address-bar-in-a-browser-3dob) ## Predpredavanje Kviz [Predpredavanje kviz](https://ff-quizzes.netlify.app/web/quiz/23) ### Uvod Razširitve brskalnika so mini-aplikacije, ki izboljšajo vašo izkušnjo brskanja po spletu. Tako kot izvirna vizija Tima Berners-Leeja o interaktivnem spletu, razširitve razširjajo zmogljivosti brskalnika onkraj preprostega pregleda dokumentov. Od upravljalnikov gesel, ki varujejo vaše račune, do izbirnikov barv, ki oblikovalcem pomagajo zajeti popolne odtenke - razširitve rešujejo vsakdanje izzive pri brskanju. Preden zgradimo vašo prvo razširitev, razumimo, kako brskalniki delujejo. Tako kot je Alexander Graham Bell moral razumeti prenos zvoka preden je izumil telefon, vam bo poznavanje osnov brskalnikov pomagalo ustvariti razširitve, ki se brezhibno integrirajo z obstoječimi sistemi brskalnikov. Na koncu te lekcije boste razumeli arhitekturo brskalnika in začeli graditi svojo prvo razširitev. ```mermaid mindmap root((Architektura brskalnika)) Core Components Rendering Engine JavaScript Engine Network Stack Storage APIs User Interface Orodna vrstica z naslovom Upravljanje zavihkov Zaznamki Ikone razširitev Extension System Manifestne datoteke Vsebinski skripti Ozadjske strani Pojavna okna Security Model Pravila istega izvora API dovoljenj Varnost vsebine Izolirani svetovi Development Tools Integracija DevTools Konzola za odpravljanje napak Nadzor zmogljivosti Inšpektor razširitev ``` ## Razumevanje spletnih brskalnikov Spletni brskalnik je v bistvu sofisticiran tolmač dokumentov. Ko v naslovno vrstico vtipkate "google.com", brskalnik izvede kompleksen niz operacij – zahteva vsebino s strežnikov po vsem svetu, nato analizira in prikaže to kodo kot interaktivne spletne strani, ki jih vidite. Ta proces odraža, kako je prvi spletni brskalnik, WorldWideWeb, načrtoval Tim Berners-Lee leta 1990, da bi omogočil dostop do hiperpovezanih dokumentov vsem. ✅ **Malo zgodovine**: Prvi brskalnik se je imenoval 'WorldWideWeb' in ga je leta 1990 ustvaril Sir Timothy Berners-Lee.  > Nekateri zgodnji brskalniki, preko [Karen McGrane](https://www.slideshare.net/KMcGrane/week-4-ixd-history-personal-computing) ### Kako brskalniki obdelujejo spletno vsebino Proces od vnosa URL-ja do ogleda spletne strani vključuje več usklajenih korakov, ki se zgodijo v nekaj sekundah: ```mermaid sequenceDiagram participant User participant Browser participant Extension participant DNS participant Server User->>Browser: Vpiše URL in pritisne Enter Browser->>Extension: Sproži dogodek beforeRequest Extension->>Extension: Preveri, ali je treba spremeniti URL Browser->>DNS: Poišče IP naslov strežnika DNS->>Browser: Vrne IP naslov Browser->>Server: Zahteva vsebino spletne strani Server->>Browser: Pošlje HTML, CSS in JavaScript Browser->>Extension: Sproži dogodek beforeResponse Extension->>Extension: Po potrebi spremeni vsebino Browser->>User: Prikaže celotno spletno stran Extension->>User: Prikaže posodobitve UI razširitve ``` **Tukaj je, kaj ta proces doseže:** - **Prevede** URL, berljiv ljudem, v IP naslov strežnika preko DNS poizvedbe - **Vzpostavi** varno povezavo s spletnim strežnikom z uporabo protokolov HTTP ali HTTPS - **Zahteva** vsebino določene spletne strani s strežnika - **Prejme** HTML označevanje, CSS stiliranje in JavaScript kodo s strežnika - **Prikaže** vsebino kot interaktivno spletno stran, ki jo vidite ### Glavne funkcije brskalnika Sodobni brskalniki nudijo številne funkcije, ki jih razvijalci razširitev lahko izkoristijo: | Funkcija | Namen | Možnosti za razširitve | |---------|---------|------------------------| | **Grafični pogon (Rendering Engine)** | Prikazuje HTML, CSS in JavaScript | Spreminjanje vsebine, vbrizgavanje stilov | | **JavaScript pogon** | Izvaja JavaScript kodo | Po meri skripte, API interakcije | | **Lokalni pomnilnik** | Shrani podatke lokalno | Nastavitve uporabnikov, predpomnjeni podatki | | **Mrežni sloj** | Obravnava spletne zahteve | Spremljanje zahtev, analiza podatkov | | **Varnostni model** | Ščiti uporabnike pred zlonamerno vsebino | Filtriranje vsebine, varnostne izboljšave | **Razumevanje teh funkcij vam pomaga:** - **Prepoznati** kje lahko vaša razširitev največ prispeva - **Izbrati** prave brskalniške API-je za funkcionalnosti vaše razširitve - **Oblikovati** razširitve, ki učinkovito delujejo s sistemi brskalnika - **Zagotavljati** varnostne prakse brskalnikov pri razširitvah ### Upoštevanje razvoja za različne brskalnike Različni brskalniki standarde izvajajo z rahlimi razlikami, podobno kot različni programski jeziki lahko isto algoritmično nalogo obravnavajo drugače. Chrome, Firefox in Safari imajo vsak svoje posebnosti, ki jih morajo razvijalci upoštevati pri razvoju razširitev. > 💡 **Nasvet**: Uporabite [caniuse.com](https://www.caniuse.com) za preverjanje, katere spletne tehnologije so podprte v različnih brskalnikih. To je neprecenljivo pri načrtovanju funkcij vaše razširitve! **Ključna ozira za razvoj razširitev:** - **Preizkusite** razširitev v Chrome, Firefox in Edge - **Prilagajajte** se različnim API-jem in manifest formatom brskalnikov - **Obravnavajte** razlike v zmogljivostih in omejitvah - **Nudite** nadomestke za brskalniško specifične funkcije, ki morda niso na voljo ✅ **Vpogled v analitiko**: S pomočjo analitičnih paketov v spletnem razvoju lahko ugotovite, katere brskalnike uporabniki raje uporabljajo. To vam pomaga določiti, katere brskalnike podpirati najprej. ## Razumevanje razširitev brskalnika Razširitve brskalnika rešujejo pogoste izzive spletnega brskanja tako, da dodajo funkcionalnost neposredno v uporabniški vmesnik brskalnika. Namesto uporabe ločenih aplikacij ali kompleksnih delovnih tokov omogočajo takojšen dostop do orodij in funkcij. Ta koncept odraža, kako so zgodnji računalniški pionirji, kot je Douglas Engelbart, zamišljali nadgradnjo človeških zmogljivosti s tehnologijo – razširitve nadgradijo osnovno funkcionalnost vašega brskalnika. ```mermaid quadrantChart title Kategorije Razširitev Brskalnika x-axis Preprosto --> Kompleksno y-axis Osebna Raba --> Profesionalna Orodja quadrant-1 Orodja za Razvijalce quadrant-2 Podjetniške Rešitve quadrant-3 Osebna Orodja quadrant-4 Aplikacije za Produktivnost 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] ``` **Priljubljene kategorije razširitev in njihove koristi:** - **Orodja za produktivnost**: Upravljalniki nalog, aplikacije za zapisovanje in merjenje časa, ki pomagajo ostati organizirani - **Varnostne izboljšave**: Upravljalniki gesel, blokatorji oglasov in orodja za zasebnost, ki varujejo vaše podatke - **Orodja za razvijalce**: Oblikovalniki kode, izbirniki barv in razhroščevalna orodja, ki poenostavljajo razvoj - **Izboljšave vsebine**: Načini branja, prenašalniki videoposnetkov in orodja za zajem zaslona, ki izboljšajo spletno izkušnjo ✅ **Vprašanje za razmislek**: Katere so vaše najljubše razširitve brskalnika? Katere naloge specifično opravljajo in kako izboljšajo vašo izkušnjo brskanja? ### 🔄 **Pedagoški pregled** **Razumevanje arhitekture brskalnika**: Pred razvojem razširitev se prepričajte, da lahko: - ✅ Razložite, kako brskalniki obdelujejo spletne zahteve in prikazujejo vsebino - ✅ Prepoznate glavne komponente arhitekture brskalnika - ✅ Razumete, kako se razširitve integrirajo z zmogljivostmi brskalnika - ✅ Prepoznate varnostni model, ki ščiti uporabnike **Hiter samopreizkus**: Ali lahko sledite poti od vnosa URL-ja do prikaza spletne strani? 1. **DNS poizvedba** pretvori URL v IP naslov 2. **HTTP zahteva** pridobi vsebino s strežnika 3. **Analiza** obdeluje HTML, CSS in JavaScript 4. **Prikaz** prikaže končno spletno stran 5. **Razširitve** lahko spreminjajo vsebino na več korakih ## Namestitev in upravljanje razširitev Razumevanje procesa namestitve razširitev vam pomaga predvideti uporabniško izkušnjo, ko ljudje namestijo vašo razširitev. Proces namestitve je standardiziran v sodobnih brskalnikih, z manjšimi razlikami v oblikovanju vmesnika.  > **Pomembno**: Prepričajte se, da pri testiranju svojih razširitev omogočite razvojni način in dovolite razširitve iz drugih trgovin. ### Postopek namestitve razširitve med razvojem Ko razvijate in testirate svoje razširitve, sledite temu postopku: ```mermaid flowchart TD A[Napiši kodo] --> B[Ustvari razširitev] B --> C{Prva namestitev?} C -->|Da| D[Naloži razpakirano] C -->|Ne| E[Znova naloži razširitev] D --> F[Preizkusi funkcionalnost] E --> F F --> G{Deluje pravilno?} G -->|Ne| H[Odpravi napake] G -->|Da| I[Pripravljeno za uporabnike] H --> A I --> J[Objavi v trgovini] style A fill:#e1f5fe style F fill:#e8f5e8 style I fill:#f3e5f5 style J fill:#fff3e0 ``` ```bash # Korak 1: Zgradite svojo razširitev npm run build ``` **Kaj ta ukaz naredi:** - **Prevede** vašo izvorno kodo v datoteke, pripravljene za brskalnik - **Združi** JavaScript module v optimirane pakete - **Ustvari** končne datoteke razširitve v mapi `/dist` - **Pripravi** vašo razširitev za namestitev in testiranje **Korak 2: Odprite stran z razširitvami brskalnika** 1. **Odprite** stran za upravljanje razširitev v vašem brskalniku 2. **Kliknite** gumb "Nastavitve in več" (ikona `...`) zgoraj desno 3. **Izberite** "Razširitve" iz spustnega menija **Korak 3: Naložite svojo razširitev** - **Za nove namestitve**: Izberite `load unpacked` in izberite svojo mapo `/dist` - **Za posodobitve**: Kliknite `reload` zraven že nameščene razširitve - **Za testiranje**: Omogočite "Razvojni način" za dostop do dodatnih funkcij za razhroščevanje ### Namestitev razširitev v produkciji > ✅ **Opomba**: Ta navodila za razvoj so namenjena specifično razširitvam, ki jih sami razvijate. Za namestitev objavljenih razširitev obiščite uradne trgovine z razširitvami brskalnikov, kot je [Microsoft Edge Trgovina z razširitvami](https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home). **Razumevanje razlik:** - **Namestitve med razvojem** omogočajo testiranje neobjavljenih razširitev med razvojem - **Namestitve iz trgovine** zagotavljajo preverjene, objavljene razširitve z avtomatskimi posodobitvami - **Sideloading** omogoča namestitev razširitev zunaj uradnih trgovin (zahteva razvojni način) ## Gradnja razširitve za ogljični odtis Ustvarili bomo razširitev brskalnika, ki prikazuje ogljični odtis porabe električne energije v vaši regiji. Ta projekt ponazarja bistvene koncepte razvoja razširitev, hkrati pa ustvarja praktično orodje za okoljsko ozaveščenost. Ta pristop sledi načelu "učenja skozi delo", ki se je izkazalo za učinkovito že od John Deweyjevih izobraževalnih teorij – združevanje tehničnih veščin z realnimi, pomembnimi aplikacijami. ### Zahteve projekta Pred začetkom razvoja zberimo potrebne vire in odvisnosti: **Zahtevan dostop do API-ja:** - **[CO2 Signal API ključ](https://www.co2signal.com/)**: Vnesite svoj elektronski naslov za prejem brezplačnega API ključa - **[Šifra regije](http://api.electricitymap.org/v3/zones)**: Najdite kodo svoje regije z uporabo [Electricity Map](https://www.electricitymap.org/map) (na primer, Boston uporablja 'US-NEISO') **Razvojna orodja:** - **[Node.js in NPM](https://www.npmjs.com)**: Orodje za upravljanje paketov za namestitev odvisnosti projekta - **[Začetna koda](../../../../5-browser-extension/start)**: Prenesite mapo `start` za začetek razvoja ✅ **Izboljšajte veščine**: Nadgradite svoje upravljanje paketov s tem [celovitim Learn modulom](https://docs.microsoft.com/learn/modules/create-nodejs-project-dependencies/?WT.mc_id=academic-77807-sagibbon) ### Razumevanje strukture projekta Razumevanje strukture projekta pomaga učinkovito organizirati razvojno delo. Tako kot je bila Aleksandrijska knjižnica organizirana za lažje pridobivanje znanja, tudi dobro strukturirana koda omogoča učinkovitejši razvoj: ``` 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 ``` **Kaj vsaka datoteka omogoča:** - **`manifest.json`**: **Določa** metapodatke razširitve, dovoljenja in vhodne točke - **`index.html`**: **Ustvari** uporabniški vmesnik, ki se pojavi, ko uporabniki kliknejo vašo razširitev - **`background.js`**: **Upravlja** ozadna opravila in poslušalce dogodkov brskalnika - **`main.js`**: **Vsebuje** končni združeni JavaScript po gradnji - **`src/index.js`**: **Vsebuje** vašo glavno razvojno kodo, ki se prevede v `main.js` > 💡 **Organizacijski nasvet**: Shranite svoj API ključ in kodo regije v varno beležko za lažji dostop med razvojem. Te vrednosti boste potrebovali za testiranje funkcionalnosti razširitve. ✅ **Varnostni nasvet**: Nikoli ne shranjujte API ključev ali občutljivih poverilnic v repozitorij kode. V naslednjih korakih vam bomo pokazali, kako to varno upravljati. ## Ustvarjanje uporabniškega vmesnika razširitve Zdaj bomo zgradili uporabniške komponente vmesnika. Razširitev uporablja pristop z dvema zaslonoma: zaslon za nastavitev ob prvi uporabi in zaslon za prikaz rezultatov. To sledi principu postopnega razkrivanja, ki se uporablja že od zgodnjih dni računalništva – informacije in možnosti se prikazujejo v logičnem zaporedju, da ne preobremenijo uporabnikov. ### Pregled pogledov razširitve **Pogled nastavitve** - konfiguracija ob prvi uporabi:  **Pogled rezultatov** - prikaz podatkov o ogljičnem odtisu:  ### Izdelava obrazca za nastavitve Obrazec nastavitve zbira podatke o konfiguraciji uporabnika ob prvi uporabi. Ko je nastavljen, ti podatki ostanejo shranjeni v pomnilnik brskalnika za prihodnje seje. V datoteko `/dist/index.html` dodajte to strukturo obrazca: ```html
``` **Kaj ta obrazec doseže:** - **Ustvari** semantično strukturo obrazca z ustreznimi oznakami in povezavami vnosa - **Omogoči** avtomatsko izpolnjevanje brskalnika za boljšo uporabniško izkušnjo - **Zahteva** izpolnitev obeh polj pred oddajo z atributom `required` - **Organizira** vhodna polja z opisnimi imeni razredov za lažje stiliranje in ciljanje v JavaScriptu - **Nudi** jasna navodila za uporabnike, ki razširitev nastavljajo prvič ### Izdelava prikaza rezultatov Nato ustvarite območje za prikaz rezultatov, kjer bodo prikazani podatki o ogljičnem odtisu. Dodajte ta HTML pod obrazec: ```htmlRegion:
Carbon Usage:
Fossil Fuel Percentage: