# Пројекат проширења прегледача Deo 1: Све о прегледачима ```mermaid journey title Ваш пут развоја проширења прегледача section Основа Разумети прегледаче: 3: Student Учити типове проширења: 4: Student Подесити развој: 4: Student section Развој Направити интерфејс: 4: Student Додати функционалност: 5: Student Руковати подацима: 5: Student section Интеграција Тестирати у прегледачу: 5: Student Отkloniti грешке: 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 Address Bar Tab Management Bookmarks Extension Icons Extension System Манифест фајлови Content Scripts Background Pages Popup Windows Security Model Политика истог порекла Permissions API Content Security Isolated Worlds Development Tools DevTools Integration Debug Console Performance Monitor Extension Inspector ``` ## Разумевање веб прегледача Веб прегледач је у суштини сложени тумач докумената. Када унесете "google.com" у траку за адресу, прегледач извршава комплексну серију операција – захтева садржај са сервера широм света, затим парсира и приказује тај код у интерактивне веб странице које видите. Овај процес одражава како је први веб прегледач, WorldWideWeb, дизајнирао Тим Бернерс-Ли 1990. године да би хиперлинковани документи били доступни свима. ✅ **Мало историје**: Први прегледач назван је 'WorldWideWeb' и креирао га је сер Тимоти Бернерс-Ли 1990. године.  > Неки рани прегледачи, преко [Karen McGrane](https://www.slideshare.net/KMcGrane/week-4-ixd-history-personal-computing) ### Како прегледачи обрађују веб садржај Процес између уноса УРЛ-a и приказа веб странице укључује неколико координисаних корака који се дешавају у року од секунди: ```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 додатка ``` **Ево шта тај процес обавља:** - **Преводи** читљиви УРЛ у ИП адресу сервера преко DNS претраге - **Успоставља** сигурну везу са веб сервером коришћењем HTTP или HTTPS протокола - **Захтева** одређени веб садржај са сервера - **Прима** HTML ознаку, CSS стилове и Јаваскрипт код са сервера - **Приказује** сав садржај у интерактивној веб страници коју видите ### Основне функције прегледача Модерни прегледачи пружају бројне функције које програмери проширења могу искористити: | Функција | Сврха | Могућности за проширења | |---------|---------|------------------------| | **Рендеринг мотор** | Приказује HTML, CSS и JavaScript | Модификација садржаја, уметање стилова | | **JavaScript мотор** | Извршава JavaScript код | Прилагођени скрипти, API интеракције | | **Локална меморија** | Чува податке локално | Корисничке поставке, кеширани подаци | | **Мрежни слој** | Обрађује веб захтеве | Праћење захтева, анализа података | | **Безбедносни модел** | Штити кориснике од злонамерног садржаја | Филтрирање садржаја, безбедносна унапређења | **Разумевање ових функција вам помаже да:** - **Препознате** где ваше проширење може донети највећу вредност - **Изаберете** праве браузер API-је за функционалност проширења - **Дизајнирате** проширења која ефикасно раде са системима прегледача - **Обезбедите** да ваше проширење следи најбоље безбедносне праксе прегледача ### Разматрања за развој на више прегледача Различити прегледачи имплементирају стандарде са мањим варијацијама, слично као што различити програмијски језици могу другачије руковати истим алгоритмом. Chrome, Firefox и Safari имају јединствене карактеристике које програмери морају узети у обзир током развоја проширења. > 💡 **Професионални савет**: Користите [caniuse.com](https://www.caniuse.com) да проверите које веб технологије су подржане у различитим прегледачима. Ово је непроцењиво при планирању функција вашег проширења! **Кључна разматрања за развој проширења:** - **Тестирајте** проширења у Chrome, Firefox и Edge прегледачима - **Прилагодите** се различитим API-јима и форматима манифеста проширења - **Решавајте** различите перформансе и ограничења - **Обезбедите** алтернативе за функције специфичне за прегледач које можда нису доступне ✅ **Увид из аналитике**: Можете сазнати који прегледачи су најпопуларнији међу вашим корисницима инсталирањем аналитичких пакета у вашим пројектима веб развоја. Ови подаци вам помажу да одредите приоритете подршке прегледачима. ## Разумевање проширења за прегледач Проширења прегледача решавају уобичајене изазове у веб претраживању додавањем функционалности директно у интерфејс прегледача. Уместо да захтевају посебне апликације или сложене радне токове, проширења пружају непосредан приступ алатима и функцијама. Овај концепт одражава како су рани рачунарски пионири као Douglas Engelbart замишљали побољшање људских капацитета технологијом - проширења повећавају базичну функционалност вашег прегледача. ```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 претрага** претвара УРЛ у ИП адресу 2. **HTTP захтев** преузима содржај са сервера 3. **Парсирање** обрађује HTML, CSS и JavaScript 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 ``` **Ова команда ради:** - **Компилира** изворни код у фајлове спремне за прегледач - **Пакује** JavaScript модуле у оптимизоване пакете - **Генерише** коначне фајлове проширења у фолдеру `/dist` - **Припрема** проширење за инсталацију и тестирање **Корак 2: Идите на странице за управљање проширењима прегледача** 1. **Отворите** страницу за управљање проширењима у вашем прегледачу 2. **Кликните** на дугме "Поставке и још" (икона `...`) горе десно 3. **Изаберите** "Проширења" из падајућег менија **Корак 3: Учитајте ваше проширење** - **За нове инсталације**: Изаберите `load unpacked` и покажите на ваш `/dist` фолдер - **За ажурирања**: Кликните `reload` поред већ инсталираног проширења - **За тестирање**: Укључите "Developer mode" за приступ додатним алаткама за отклањање грешака ### Инсталација проширења за продукцију > ✅ **Напомена**: Ова упутства за развој су намењена за проширења која сами градите. За инсталирање објављених проширења посетите званичне продавнице проширења прегледача као што је [Microsoft Edge Add-ons store](https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home). **Разлика:** - **Развојна инсталација** омогућава тестирање непубликованих проширења током развоја - **Инсталација из продавнице** пружа проверена, објављена проширења са аутоматским ажурирањима - **Сајдлоадинг** омогућава инсталацију проширења ван званичних продавница (захтева режим развојног програмера) ## Направите ваше проширење угљеничног отиска Направићемо проширење прегледача које приказује угљенични отисак енергетске потрошње вашег региона. Овај пројекат демонстрира основне концепте развоја проширења, док истовремено прави корисан алат за еколошку свест. Овај приступ прати принцип "учења кроз рад" који се показао ефикасним још од образовних теорија Џона Дјуија—спајање техничких вештина са значајним применама у стварном свету. ### Захтеви пројекта Пре почетка развоја, прикупимо потребне ресурсе и зависности: **Потребан приступ API-ју:** - **[CO2 Signal API кључ](https://www.co2signal.com/)**: Унесите вашу видео адресу е-поште да бисте добили бесплатан API кључ - **[Код региона](http://api.electricitymap.org/v3/zones)**: Пронађите код свог региона преко [Electricity Map](https://www.electricitymap.org/map) (на пример, Boston користи '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`**: **Садржи** коначно обједињен JavaScript након процеса израде - **`src/index.js`**: **Смешта** ваш главни изворни код који се компајлира у `main.js` > 💡 **Савет за организацију**: Чувајте свој API кључ и код региона у безбедној белешци ради лаког проналажења током развоја. Биће вам потребне ове вредности да тестирате функционалност проширења. ✅ **Безбедносна напомена**: Никада не комитујте API кључеве или осетљиве акредитиве у ваш репозиторијум кода. Показаћемо вам како безбедно руковати овим у наредним корацима. ## Креирање интерфејса проширења Сада ћемо направити компоненте корисничког интерфејса. Проширење користи приступ са два екрана: екран за подешавање за почетну конфигурацију и екран за приказ резултата. Ово прати принцип постепеног откривања коришћен од раних дана рачунарства – откривање информација и опција у логичном низу како се корисник не би преоптеретио. ### Преглед приказа проширења **Приказ подешавања** – конфигурација новог корисника:  **Приказ резултата** – приказ података о угљеничном отиску:  ### Креирање формулара за подешавање Формулар за подешавање прикупља конфигурацијске податке корисника током првог коришћења. Једном када се подешавања сачувају, ова информација остаје у локалној меморији прегледача за будуће сесије. У фајлу `/dist/index.html` додајте ову структуру формулара: ```html
``` **Ево шта овај формулар ради:** - **Креира** семантичку структуру формулара са исправним етикетама и везама за уносе - **Омогућава** аутоматско попуњавање у прегледачу ради бољег искуства корисника - **Захтева** да оба поља буду попуњена пре слања путем `required` атрибута - **Организује** уносе са описним именима класа ради лакшег стилизовања и циљања у JavaScript-у - **Пружа** јасна упутства корисницима који постављају проширење први пут ### Креирање приказа резултата Затим креирајте област за приказ резултата која ће приказивати податке о угљеничном отиску. Додајте овај HTML испод формулара: ```htmlRegion:
Carbon Usage:
Fossil Fuel Percentage: