# Проект расширения для браузера, часть 1: Всё о браузерах ```mermaid journey title Your Browser Extension Development Journey section Foundation Understand browsers: 3: Student Learn extension types: 4: Student Setup development: 4: Student section Development Build interface: 4: Student Add functionality: 5: Student Handle data: 5: Student section Integration Test in browser: 5: Student Debug issues: 4: Student Polish experience: 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((Browser Architecture)) Core Components Rendering Engine JavaScript Engine Network Stack Storage APIs User Interface Address Bar Tab Management Bookmarks Extension Icons 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 ``` ## Понимание веб-браузеров Веб-браузер — это, по сути, сложный интерпретатор документов. Когда вы вводите "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: Types URL and presses Enter Browser->>Extension: Trigger beforeRequest event Extension->>Extension: Check if URL needs modification Browser->>DNS: Looks up server IP address DNS->>Browser: Returns IP address Browser->>Server: Requests web page content Server->>Browser: Sends HTML, CSS, and JavaScript Browser->>Extension: Trigger beforeResponse event Extension->>Extension: Modify content if needed Browser->>User: Renders complete web page Extension->>User: Show extension UI updates ``` **Что выполняет этот процесс:** - **Преобразует** читаемый человеком 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 Browser Extension Categories x-axis Simple --> Complex y-axis Personal Use --> Professional Tools quadrant-1 Developer Tools quadrant-2 Enterprise Solutions quadrant-3 Personal Utilities quadrant-4 Productivity Apps 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[Write Code] --> B[Build Extension] B --> C{First Install?} C -->|Yes| D[Load Unpacked] C -->|No| E[Reload Extension] D --> F[Test Functionality] E --> F F --> G{Working Correctly?} G -->|No| H[Debug Issues] G -->|Yes| I[Ready for Users] H --> A I --> J[Publish to Store] style A fill:#e1f5fe style F fill:#e8f5e8 style I fill:#f3e5f5 style J fill:#fff3e0 ``` ```bash # Step 1: Build your extension 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:** - **[CO2 Signal API key](https://www.co2signal.com/)**: Введите ваш адрес электронной почты, чтобы получить бесплатный ключ API - **[Код региона](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`, чтобы начать разработку ✅ **Узнать больше**: Улучшите свои навыки управления пакетами с помощью [этого подробного модуля обучения](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: