# Проект за разширение на браузър Част 1: Всичко за браузърите ```mermaid journey title Вашето пътуване в разработката на браузър разширения section Основи Разбиране на браузърите: 3: Student Научете типовете разширения: 4: Student Настройка на развитието: 4: Student section Разработка Създаване на интерфейс: 4: Student Добавяне на функционалност: 5: Student Обработка на данни: 5: Student section Интеграция Тестване в браузъра: 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 Рендиращ двигател JavaScript двигател Мрежов стек API за съхранение 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) ### Как браузърите обработват уеб съдържание Процесът от въвеждането на URL до гледането на уеб страница включва няколко координирани стъпки, които се случват за секунди: ```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 адреса, разбираем за хората, в IP адрес на сървър чрез DNS заявка - **Установява** сигурна връзка със уеб сървъра чрез HTTP или HTTPS протоколи - **Заявява** конкретното съдържание на уеб страницата от сървъра - **Получава** HTML маркиране, CSS стилизиране и JavaScript код от сървъра - **Визуализира** цялото съдържание като интерактивна уеб страница, която виждате ### Основни функции на браузъра Съвременните браузъри предлагат множество функции, които разработчиците на разширения могат да използват: | Функция | Цел | Възможности за разширения | |---------|---------|------------------------| | **Рендеринг енджин** | Показва HTML, CSS и JavaScript | Модификация на съдържание, вмъкване на стилове | | **JavaScript енджин** | Изпълнява JavaScript код | Потребителски скриптове, взаимодействие с 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] ``` **Популярни категории разширения и техните предимства:** - **Инструменти за продуктивност**: Мениджъри на задачи, приложения за водене на бележки и тракери за време, които помагат за по-добра организация - **Подобрения в сигурността**: Мениджъри на пароли, блокиращи реклами, инструменти за защита на поверителността, които пазят вашите данни - **Инструменти за разработчици**: Форматори на код, инструменти за избор на цветове и дебъгинг, които улесняват разработката - **Подобрения на съдържанието**: Режими за четене, изтеглящи видео файлове и инструменти за екранни снимки, които подобряват изживяването при сърфиране ✅ **Въпрос за размисъл**: Кои са любимите ви разширения за браузър? Какви конкретни задачи изпълняват и как подобряват сърфирането ви? ### 🔄 **Педагогически проверка** **Разбиране на архитектурата на браузърите**: Преди да преминете към разработка на разширения, уверете се, че можете: - ✅ Да обясните как браузърите обработват уеб заявки и визуализират съдържание - ✅ Да идентифицирате основните компоненти на архитектурата на браузъра - ✅ Да разберете как разширенията се интегрират с функционалността на браузъра - ✅ Да познавате модела за сигурност, който защитава потребителите **Бърз самотест**: Можете ли да проследите пътя от въвеждането на URL до показването на уеб страница? 1. **DNS заявка** превръща URL в IP адрес 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` до вече инсталирано разширение - **За тестване**: Активирайте "Режим за разработчици" за достъп до по-дълбоки функции за дебъгинг ### Инсталиране на разширения в продукция > ✅ **Забележка**: Тези инструкции за разработка са предназначени за разширения, които сами създавате. За инсталиране на публикувани разширения, посетете официалните магазини за разширения, като [Microsoft Edge Add-ons store](https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home). **Разбиране на разликата:** - **Разработващи инсталации** позволяват тестване на непубликувани разширения по време на разработка - **Инсталации от магазина** предлагат проверени, публикувани разширения с автоматични ъпдейти - **Сайдлоудинг** позволява инсталиране на разширения от външни източници (изисква режим за разработчици) ## Създаване на разширението за въглеродния отпечатък Ще създадем разширение за браузър, което показва въглеродния отпечатък от енергопотреблението във вашия регион. Този проект демонстрира основни концепции за разработка на разширения, докато създава практичен инструмент за екологично съзнание. Този подход следва принципа "учене чрез правене", доказано ефективен от образователните теории на Джон Дюи - комбиниране на технически умения със значими приложения в реалния свят. ### Изисквания към проекта Преди да започнете разработката, нека съберем необходимите ресурси и зависимости: **Изискван достъп до API:** - **[API ключ за CO2 Signal](https://www.co2signal.com/)**: Въведете своя имейл адрес, за да получите безплатния си ключ - **[Код на регион](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`**: **Съдържа** окончателния пакет JavaScript след процеса на компилация - **`src/index.js`**: **Кодира** основния код за разработка, който се компилира в `main.js` > 💡 **Съвет за организация**: Запишете своя API ключ и регионалния код в сигурна бележка за лесен достъп по време на разработка. Тези данни ще са ви необходими за тестване на функционалността на разширението. ✅ **Съвет за сигурност**: Никога не вкарвайте API ключове или чувствителни данни в хранилището на кода. Ще ви покажем как да ги управлявате сигурно в следващите стъпки. ## Създаване на интерфейса на разширението Сега ще изградим компонентите на потребителския интерфейс. Разширението използва двусекционен подход: екран за конфигурация при първоначална настройка и екран с резултати за показване на данни. Това следва принципа за прогресивно разкриване, използван в дизайна на интерфейси още от ранните компютърни дни - разкриване на информация и опции в логична последователност, за да не се претоварват потребителите. ### Преглед на изгледите на разширението **Екран за настройка** - Конфигурация при първото използване:  **Екран с резултати** - Показване на данните за въглеродния отпечатък:  ### Изграждане на формата за конфигурация Формата за настройка събира данни от потребителя при първото използване. След конфигурация, тази информация се запазва в браузърното хранилище за бъдещи сесии. Във файла `/dist/index.html` добавете тази структура на формата: ```html
``` **Ето какво осигурява тази форма:** - **Създава** семантична структура с подходящи етикети и асоциации на полета - **Активира** функциите за автоматично довършване на браузъра за подобрено потребителско изживяване - **Изисква** попълване на всички полета преди подаване чрез атрибута `required` - **Организира** полетата с описателни имена на класове за лесна стилизация и JavaScript насочване - **Предоставя** ясни инструкции за потребителите, които настройват разширението за първи път ### Изграждане на екран за показване на резултати След това създайте областта за резултати, която ще показва данните за въглеродния отпечатък. Добавете този HTML под формата: ```htmlRegion:
Carbon Usage:
Fossil Fuel Percentage: