# Nettleserutvidelsesprosjekt Del 1: Alt om Nettlesere ```mermaid journey title Din Nettleserutvidelsesutviklingsreise section Grunnlag Forstå nettlesere: 3: Student Lær utvidelsestyper: 4: Student Sett opp utvikling: 4: Student section Utvikling Bygg grensesnitt: 4: Student Legg til funksjonalitet: 5: Student Håndter data: 5: Student section Integrasjon Test i nettleser: 5: Student Feilsøk problemer: 4: Student Poler opplevelsen: 5: Student ```  > Sketchnote av [Wassim Chegham](https://dev.to/wassimchegham/ever-wondered-what-happens-when-you-type-in-a-url-in-an-address-bar-in-a-browser-3dob) ## Quiz før forelesning [Quiz før forelesning](https://ff-quizzes.netlify.app/web/quiz/23) ### Introduksjon Nettleserutvidelser er mini-applikasjoner som forbedrer din nettleseropplevelse. Som Tim Berners-Lees opprinnelige visjon om et interaktivt nett, utvider utvidelser nettleserens evner utover enkel dokumentvisning. Fra passordbehandlere som sikrer kontoene dine, til fargeplukkere som hjelper designere å få perfekte nyanser, løser utvidelser hverdagslige nettleserutfordringer. Før vi bygger din første utvidelse, la oss forstå hvordan nettlesere fungerer. På samme måte som Alexander Graham Bell måtte forstå lydoverføring før han oppfant telefonen, vil kunnskap om nettleserens grunnprinsipper hjelpe deg å lage utvidelser som integreres sømløst med eksisterende nettlesersystemer. Ved slutten av denne leksjonen vil du forstå nettleserarkitektur og ha startet byggingen av din første utvidelse. ```mermaid mindmap root((Nettleserarkitektur)) Core Components Rendering Engine JavaScript Engine Network Stack Storage APIs User Interface Adressefelt Fanehåndtering Bokmerker Utvidelsesikoner Extension System Manifestfiler Innholdsskript Bakgrunnssider Popup-vinduer Security Model Samme-opprinnelses-policy Tillatelses-API Innholdssikkerhet Isolerte verdener Development Tools DevTools-integrasjon Feilsøkingskonsoll Ytelsesmonitor Utvidelsesinspektør ``` ## Forstå Nettlesere En nettleser er i hovedsak en sofistikert dokumenttolker. Når du skriver "google.com" i adressefeltet, utfører nettleseren en kompleks serie operasjoner - den forespør innhold fra servere verden over, deretter analyserer og viser den koden som interaktive nettsider du ser. Denne prosessen speiler hvordan den første nettleseren, WorldWideWeb, ble designet av Tim Berners-Lee i 1990 for å gjøre hyperlenkede dokumenter tilgjengelige for alle. ✅ **Litt historie**: Den første nettleseren het 'WorldWideWeb' og ble laget av Sir Timothy Berners-Lee i 1990.  > Noen tidlige nettlesere, via [Karen McGrane](https://www.slideshare.net/KMcGrane/week-4-ixd-history-personal-computing) ### Hvordan Nettlesere Behandler Nettinnhold Prosessen mellom å skrive inn en URL og å se en nettside inneholder flere koordinerte trinn som skjer i løpet av sekunder: ```mermaid sequenceDiagram participant User participant Browser participant Extension participant DNS participant Server User->>Browser: Skriver inn URL og trykker Enter Browser->>Extension: Utløser førForespørsel-hendelse Extension->>Extension: Sjekk om URL må endres Browser->>DNS: Ser opp serverens IP-adresse DNS->>Browser: Returnerer IP-adresse Browser->>Server: Forespør websideinnhold Server->>Browser: Sender HTML, CSS og JavaScript Browser->>Extension: Utløser førRespons-hendelse Extension->>Extension: Endre innhold hvis nødvendig Browser->>User: Gjengir fullstendig webside Extension->>User: Viser utvidelses-UI oppdateringer ``` **Dette er hva prosessen oppnår:** - **Oversetter** den menneskelesbare URL-en til en server-IP-adresse gjennom DNS-oppslag - **Etablerer** en sikker tilkobling til webserveren ved bruk av HTTP eller HTTPS protokoller - **Forespør** det spesifikke websideinnholdet fra serveren - **Mottar** HTML-markup, CSS-stil og JavaScript-kode fra serveren - **Renderer** alt innhold til den interaktive nettsiden du ser ### Nettleserens Kjernefunksjoner Moderne nettlesere tilbyr mange funksjoner som utviklere av utvidelser kan bruke: | Funksjon | Formål | Muligheter for utvidelser | |---------|---------|------------------------| | **Rendering Engine** | Viser HTML, CSS og JavaScript | Innholdsmodifisering, stiltilsetting | | **JavaScript Engine** | Utfører JavaScript-kode | Egne skript, API-interaksjoner | | **Lokal lagring** | Lagrer data lokalt | Brukerinnstillinger, bufret data | | **Nettverksstakk** | Håndterer nettverksforespørsler | Overvåkning av forespørsler, dataanalyse | | **Sikkerhetsmodell** | Beskytter brukere mot skadelig innhold | Innholdsfiltrering, sikkerhetsforbedringer | **Å forstå disse funksjonene hjelper deg med å:** - **Identifisere** hvor utvidelsen din kan tilføre mest verdi - **Velge** riktige nettleser-API-er for utvidelsens funksjonalitet - **Designe** utvidelser som fungerer effektivt med nettlesersystemer - **Sikre** at utvidelsen følger nettleserens sikkerhetspraksis ### Vurderinger for Utvikling på Tvers av Nettlesere Forskjellige nettlesere implementerer standarder med små variasjoner, på samme måte som forskjellige programmeringsspråk kan håndtere samme algoritme ulikt. Chrome, Firefox og Safari har alle unike egenskaper som utviklere må ta hensyn til under utvidelsesutvikling. > 💡 **Proff tips**: Bruk [caniuse.com](https://www.caniuse.com) for å sjekke hvilke webteknologier som støttes i ulike nettlesere. Dette er uvurderlig når du planlegger funksjonene til utvidelsen din! **Viktige hensyn ved utvidelsesutvikling:** - **Test** utvidelsen din i Chrome, Firefox og Edge - **Tilpass** deg ulike nettleserutvidelses-API-er og manifestformater - **Håndter** ulike ytelseselementer og begrensninger - **Gi** alternative løsninger for nettleserspesifikke funksjoner som kanskje ikke er tilgjengelige ✅ **Analyseinnsikt**: Du kan finne ut hvilke nettlesere brukerne dine foretrekker ved å installere analysepakker i webutviklingsprosjektene dine. Denne informasjonen hjelper deg å prioritere hvilke nettlesere du bør støtte først. ## Forstå Nettleserutvidelser Nettleserutvidelser løser vanlige utfordringer ved nettlesing ved å legge til funksjonalitet direkte i nettlesergrensesnittet. I stedet for å kreve separate applikasjoner eller komplekse arbeidsflyter, gir utvidelser umiddelbar tilgang til verktøy og funksjoner. Dette konseptet speiler hvordan pionerer som Douglas Engelbart så for seg å forsterke menneskelige evner med teknologi - utvidelser forsterker nettleserens grunnleggende funksjonalitet. ```mermaid quadrantChart title Nettleserutvidelseskategorier x-axis Enkel --> Kompleks y-axis Personlig bruk --> Profesjonelle verktøy quadrant-1 Utviklerverktøy quadrant-2 Bedriftløsninger quadrant-3 Personlige verktøy quadrant-4 Produktivitetsapper 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ære utvidelseskategorier og deres fordeler:** - **Produktivitetsverktøy**: Oppgavebehandlere, notat-apper og tidsregistreringsverktøy som hjelper deg å holde orden - **Sikkerhetsforbedringer**: Passordbehandlere, annonseblokkere og personvernverktøy som beskytter dine data - **Utviklerverktøy**: Kodeformaterere, fargeplukkere og feilsøkingsverktøy som effektiviserer utviklingen - **Innholdsforbedring**: Lesemodi, videonedlastere og skjermbildeverktøy som forbedrer nettleseropplevelsen ✅ **Refleksjonsspørsmål**: Hva er dine favorittutvidelser? Hvilke spesifikke oppgaver utfører de, og hvordan forbedrer de nettleseropplevelsen din? ### 🔄 **Pedagogisk sjekk** **Forståelse av nettleserarkitektur**: Før du går videre til utvidelsesutvikling, sørg for at du kan: - ✅ Forklare hvordan nettlesere behandler nettforespørsler og viser innhold - ✅ Identifisere hovedkomponentene i nettleserarkitekturen - ✅ Forstå hvordan utvidelser integreres med nettleserfunksjonalitet - ✅ Gjenkjenne sikkerhetsmodellen som beskytter brukere **Rask selvtest**: Kan du følge veien fra å skrive inn en URL til å se en nettside? 1. **DNS-oppslag** konverterer URL til IP-adresse 2. **HTTP-forespørsel** henter innhold fra serveren 3. **Parsing** bearbeider HTML, CSS og JavaScript 4. **Rendering** viser den endelige nettsiden 5. **Utvidelser** kan modifisere innhold på flere trinn ## Installere og Administrere Utvidelser Å forstå installasjonsprosessen for utvidelser hjelper deg å forutse brukeropplevelsen når folk installerer din utvidelse. Installasjonsprosessen er standardisert på tvers av moderne nettlesere, med små variasjoner i brukergrensesnitt.  > **Viktig**: Husk å skru på utviklermodus og tillate utvidelser fra andre butikker når du tester dine egne utvidelser. ### Utviklingsinstallasjon av Utvidelser Når du utvikler og tester egne utvidelser, følg denne arbeidsflyten: ```mermaid flowchart TD A[Skriv kode] --> B[Bygg utvidelse] B --> C{Første installasjon?} C -->|Ja| D[Last inn upakket] C -->|Nei| E[Last inn utvidelse på nytt] D --> F[Test funksjonalitet] E --> F F --> G[Fungerer korrekt?] G -->|Nei| H[Feilsøk problemer] G -->|Ja| I[Klar for brukere] H --> A I --> J[Publiser i butikk] style A fill:#e1f5fe style F fill:#e8f5e8 style I fill:#f3e5f5 style J fill:#fff3e0 ``` ```bash # Trinn 1: Bygg utvidelsen din npm run build ``` **Dette kommandoen gjør:** - **Kompilerer** koden din til nettleserklare filer - **Pakker** JavaScript-moduler til optimaliserte pakker - **Genererer** de endelige utvidelsesfilene i `/dist`-mappen - **Forbereder** utvidelsen for installasjon og testing **Steg 2: Naviger til Nettleserutvidelser** 1. **Åpne** nettleserens administrasjonsside for utvidelser 2. **Klikk** på "Innstillinger og mer"-knappen (`...`) øverst til høyre 3. **Velg** "Utvidelser" fra rullegardinmenyen **Steg 3: Last inn Utvidelsen din** - **For nye installasjoner**: Velg `load unpacked` og pek på `/dist`-mappen din - **For oppdateringer**: Klikk `reload` ved siden av allerede installert utvidelse - **For testing**: Aktiver "Utviklermodus" for tilgang til flere feilsøkingsfunksjoner ### Produksjonsinstallasjon av Utvidelser > ✅ **Merk**: Disse utviklingsinstruksjonene gjelder spesielt for utvidelser du bygger selv. For å installere publiserte utvidelser, gå til de offisielle nettleserutvidelsesbutikkene som [Microsoft Edge Add-ons store](https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home). **Forskjellen forklart:** - **Utviklingsinstallasjon** lar deg teste upubliserte utvidelser under utvikling - **Butikkinstallasjoner** gir godkjente, publiserte utvidelser med automatiske oppdateringer - **Sideloading** tillater installasjon av utvidelser utenfor offisielle butikker (krever utviklermodus) ## Bygge Din Karbonavtrykk-utvidelse Vi skal lage en nettleserutvidelse som viser karbonavtrykket til energibruken i ditt område. Dette prosjektet demonstrerer grunnleggende konsepter i utvidelsesutvikling samtidig som det lager et praktisk verktøy for miljøbevissthet. Denne tilnærmingen følger prinsippet om "læring ved å gjøre" som har vist seg effektivt siden John Deweys pedagogiske teorier - å kombinere tekniske ferdigheter med meningsfulle virkelige anvendelser. ### Prosjektkrav Før vi begynner utviklingen, la oss samle nødvendige ressurser og avhengigheter: **Påkrevd API-tilgang:** - **[CO2 Signal API-nøkkel](https://www.co2signal.com/)**: Skriv inn e-postadressen din for å få en gratis API-nøkkel - **[Regionkode](http://api.electricitymap.org/v3/zones)**: Finn regionkoden din med [Electricity Map](https://www.electricitymap.org/map) (for eksempel bruker Boston 'US-NEISO') **Utviklingsverktøy:** - **[Node.js og NPM](https://www.npmjs.com)**: Pakkehåndteringsverktøy for installasjon av prosjektavhengigheter - **[Startkode](../../../../5-browser-extension/start)**: Last ned `start`-mappen for å begynne utviklingen ✅ **Lær mer**: Forbedre dine ferdigheter i pakkehåndtering med dette [omfattende Learn-modulet](https://docs.microsoft.com/learn/modules/create-nodejs-project-dependencies/?WT.mc_id=academic-77807-sagibbon) ### Forstå Prosjektstrukturen Å forstå prosjektstrukturen hjelper deg å organisere utviklingsarbeidet effektivt. På samme måte som biblioteket i Alexandria var organisert for lett kunnskapsinnhenting, gjør en godt strukturert kodebase utviklingen smidigere: ``` 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 ``` **Hva hver fil gjør:** - **`manifest.json`**: **Definerer** utvidelsesmetadata, tillatelser og inngangspunkter - **`index.html`**: **Lager** brukergrensesnittet som vises når brukere klikker på utvidelsen din - **`background.js`**: **Håndterer** bakgrunnsoppgaver og nettleserhendelseslyttere - **`main.js`**: **Inneholder** den endelige pakkede JavaScript-koden etter byggeprosessen - **`src/index.js`**: **Huser** hovedutviklingskoden som kompileres til `main.js` > 💡 **Organiseringstips**: Lagre API-nøkkelen og regionkoden i en sikker notat for enkel referanse under utviklingen. Du vil trenge disse verdiene for å teste utvidelsens funksjonalitet. ✅ **Sikkerhetsmerknad**: Aldri legg inn API-nøkler eller sensitive legitimasjoner i kodearkivet ditt. Vi viser deg hvordan du håndterer dette sikkert i neste steg. ## Lage Utvidelsens Grensesnitt Nå skal vi bygge brukergrensesnittkomponentene. Utvidelsen bruker en to-skjerms tilnærming: en konfigurasjonsskjerm for oppsett og en resultatskjerm for datavisning. Dette følger prinsippet om gradvis avsløring som har vært brukt i grensesnittdesign siden tidlige datadager - å vise informasjon og valgmuligheter i en logisk rekkefølge for å unngå å overvelde brukere. ### Oversikt over Utvidelsens Visninger **Oppsettvisning** - Konfigurering for første gangs bruk:  **Resultatvisning** - Visning av karbonavtrykkdata:  ### Lage Konfigurasjonsskjemaet Oppsettskjemaet samler konfigurasjonsdata fra brukeren ved første gangs bruk. Når det er satt opp, lagres denne informasjonen i nettleserlagring for fremtidige økter. I filen `/dist/index.html`, legg til denne skjema-strukturen: ```html
``` **Dette skjemaet gjør:** - **Oppretter** en semantisk skjemastruktur med korrekte etiketter og inputassosiasjoner - **Aktiverer** autofullføringsfunksjonalitet for bedre brukeropplevelse - **Krever** at begge feltene fylles ut før innsendelse ved bruk av `required`-attributtet - **Organiserer** inputfeltene med beskrivende klassenavn for enkel styling og JavaScript-målretting - **Gir** klare instruksjoner til brukere som setter opp utvidelsen for første gang ### Lage Resultatvisningen Deretter lager du resultatområdet som skal vise karbonavtrykkdata. Legg til denne HTML-en under skjemaet: ```htmlRegion:
Carbon Usage:
Fossil Fuel Percentage: