# Browser Extension Project Part 1: Tout sur les navigateurs ```mermaid journey title Votre Parcours de Développement d’Extension de Navigateur section Fondation Comprendre les navigateurs: 3: Student Apprendre les types d’extensions: 4: Student Configurer le développement: 4: Student section Développement Construire l’interface: 4: Student Ajouter des fonctionnalités: 5: Student Gérer les données: 5: Student section Intégration Tester dans le navigateur: 5: Student Déboguer les problèmes: 4: Student Affiner l’expérience: 5: Student ```  > Sketchnote par [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 avant la leçon [Quiz avant la leçon](https://ff-quizzes.netlify.app/web/quiz/23) ### Introduction Les extensions de navigateur sont des mini-applications qui améliorent votre expérience de navigation web. À l'image de la vision originale de Tim Berners-Lee pour un web interactif, les extensions étendent les capacités du navigateur au-delà de la simple consultation de documents. Des gestionnaires de mots de passe qui sécurisent vos comptes aux sélecteurs de couleurs qui aident les designers à choisir les teintes parfaites, les extensions résolvent les défis quotidiens de la navigation. Avant de créer votre première extension, comprenons comment fonctionnent les navigateurs. Tout comme Alexander Graham Bell devait comprendre la transmission du son avant d'inventer le téléphone, connaître les fondamentaux du navigateur vous aidera à créer des extensions qui s'intègrent parfaitement aux systèmes existants. À la fin de cette leçon, vous comprendrez l'architecture des navigateurs et aurez commencé à construire votre première extension. ```mermaid mindmap root((Architecture du Navigateur)) Core Components Moteur de Rendu Moteur JavaScript Pile Réseau API de Stockage User Interface Barre d'Adresse Gestion des Onglets Favoris Icônes d'Extension Extension System Fichiers Manifest Scripts de Contenu Pages d'Arrière-Plan Fenêtres Popup Security Model Politique de Même Origine API des Permissions Sécurité du Contenu Mondes Isolés Development Tools Intégration DevTools Console de Débogage Moniteur de Performance Inspecteur d'Extension ``` ## Comprendre les navigateurs web Un navigateur web est essentiellement un interprète sophistiqué de documents. Lorsque vous tapez "google.com" dans la barre d'adresse, le navigateur effectue une série complexe d'opérations - il demande du contenu à des serveurs du monde entier, puis analyse et affiche ce code sous forme de pages web interactives que vous voyez. Ce processus reflète la conception du premier navigateur web, WorldWideWeb, créé par Tim Berners-Lee en 1990 pour rendre les documents hyperliés accessibles à tous. ✅ **Un peu d'histoire** : Le premier navigateur s'appelait 'WorldWideWeb' et a été créé par Sir Timothy Berners-Lee en 1990.  > Quelques navigateurs anciens, via [Karen McGrane](https://www.slideshare.net/KMcGrane/week-4-ixd-history-personal-computing) ### Comment les navigateurs traitent le contenu web Le processus entre la saisie d'une URL et l'affichage d'une page web implique plusieurs étapes coordonnées qui se déroulent en quelques secondes : ```mermaid sequenceDiagram participant User participant Browser participant Extension participant DNS participant Server User->>Browser: Tape l'URL et appuie sur Entrée Browser->>Extension: Déclenche l'événement beforeRequest Extension->>Extension: Vérifie si l'URL doit être modifiée Browser->>DNS: Recherche l'adresse IP du serveur DNS->>Browser: Renvoie l'adresse IP Browser->>Server: Demande le contenu de la page web Server->>Browser: Envoie HTML, CSS et JavaScript Browser->>Extension: Déclenche l'événement beforeResponse Extension->>Extension: Modifie le contenu si nécessaire Browser->>User: Affiche la page web complète Extension->>User: Affiche les mises à jour de l'interface de l'extension ``` **Voici ce que ce processus accomplit :** - **Traduit** l'URL lisible par l'humain en une adresse IP du serveur via une requête DNS - **Établit** une connexion sécurisée avec le serveur web en utilisant les protocoles HTTP ou HTTPS - **Demande** le contenu spécifique de la page web au serveur - **Reçoit** le balisage HTML, le style CSS et le code JavaScript du serveur - **Rend** tout le contenu en une page web interactive que vous voyez ### Fonctionnalités principales du navigateur Les navigateurs modernes offrent de nombreuses fonctionnalités que les développeurs d'extensions peuvent exploiter : | Fonctionnalité | But | Opportunités pour les extensions | |----------------|-----|----------------------------------| | **Moteur de rendu** | Affiche HTML, CSS et JavaScript | Modification de contenu, injection de styles | | **Moteur JavaScript** | Exécute le code JavaScript | Scripts personnalisés, interactions API | | **Stockage local** | Sauvegarde des données localement | Préférences utilisateur, données en cache | | **Pile réseau** | Gère les requêtes web | Surveillance des requêtes, analyse des données | | **Modèle de sécurité** | Protège les utilisateurs contre les contenus malveillants | Filtrage de contenu, améliorations de sécurité | **Comprendre ces fonctionnalités vous aide à :** - **Identifier** où votre extension peut apporter le plus de valeur - **Choisir** les bonnes API de navigateur pour la fonctionnalité de votre extension - **Concevoir** des extensions qui fonctionnent efficacement avec les systèmes du navigateur - **Assurer** que votre extension respecte les meilleures pratiques de sécurité du navigateur ### Considérations pour le développement multi-navigateurs Les différents navigateurs implémentent les standards avec de légères variations, semblables à la manière dont différents langages de programmation peuvent traiter un même algorithme différemment. Chrome, Firefox et Safari ont chacun des caractéristiques uniques que les développeurs doivent prendre en compte lors du développement d'extensions. > 💡 **Astuce pro** : Utilisez [caniuse.com](https://www.caniuse.com) pour vérifier quelles technologies web sont supportées sur les différents navigateurs. Cela est précieux lors de la planification des fonctionnalités de votre extension ! **Points clés pour le développement d'extensions :** - **Testez** votre extension sur les navigateurs Chrome, Firefox et Edge - **Adaptez** votre code aux différentes API d'extensions et formats de manifestes des navigateurs - **Gérez** les différences de performance et limitations - **Fournissez** des solutions de secours pour les fonctionnalités spécifiques à certains navigateurs qui pourraient ne pas être disponibles ✅ **Insight analytique** : Vous pouvez déterminer quels navigateurs vos utilisateurs préfèrent en installant des outils analytiques dans vos projets web. Ces données vous aident à prioriser les navigateurs à supporter en premier. ## Comprendre les extensions de navigateur Les extensions de navigateur résolvent des problèmes courants de navigation web en ajoutant des fonctionnalités directement à l'interface du navigateur. Plutôt que de nécessiter des applications séparées ou des flux de travail complexes, les extensions fournissent un accès immédiat à des outils et fonctionnalités. Ce concept reflète la façon dont les pionniers de l'informatique, comme Douglas Engelbart, envisageaient d'augmenter les capacités humaines grâce à la technologie - les extensions augmentent la fonctionnalité basique de votre navigateur. ```mermaid quadrantChart title Catégories d’Extensions de Navigateur x-axis Simple --> Complexe y-axis Usage Personnel --> Outils Professionnels quadrant-1 Outils de Développeur quadrant-2 Solutions d’Entreprise quadrant-3 Utilitaires Personnels quadrant-4 Applications de Productivité 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] ``` **Catégories populaires d'extensions et leurs bénéfices :** - **Outils de productivité** : gestionnaires de tâches, applications de prise de notes, et chronomètres qui vous aident à rester organisé - **Améliorations de sécurité** : gestionnaires de mots de passe, bloqueurs de publicités, et outils de confidentialité qui protègent vos données - **Outils pour développeurs** : formateurs de code, sélecteurs de couleur, et utilitaires de débogage qui facilitent le développement - **Amélioration du contenu** : modes lecture, téléchargeurs vidéo, et outils de capture d'écran qui améliorent votre expérience web ✅ **Question de réflexion** : Quelles sont vos extensions de navigateur préférées ? Quelles tâches spécifiques accomplissent-elles, et comment améliorent-elles votre expérience de navigation ? ### 🔄 **Contrôle pédagogique** **Compréhension de l'architecture du navigateur** : Avant de passer au développement d'extensions, assurez-vous de pouvoir : - ✅ Expliquer comment les navigateurs traitent les requêtes web et affichent le contenu - ✅ Identifier les composants principaux de l'architecture du navigateur - ✅ Comprendre comment les extensions s'intègrent à la fonctionnalité du navigateur - ✅ Reconnaître le modèle de sécurité qui protège les utilisateurs **Auto-test rapide** : Pouvez-vous tracer le chemin depuis la saisie d'une URL jusqu'à l'affichage d'une page ? 1. **Résolution DNS** convertit l'URL en adresse IP 2. **Requête HTTP** récupère le contenu du serveur 3. **Analyse** traite le HTML, CSS, et JavaScript 4. **Rendu** affiche la page web finale 5. **Extensions** peuvent modifier le contenu à plusieurs étapes ## Installer et gérer les extensions Comprendre le processus d'installation d'une extension vous aide à anticiper l'expérience utilisateur lorsque des personnes installent votre extension. Le processus d'installation est standardisé sur les navigateurs modernes, avec de légères variations dans la conception de l'interface.  > **Important** : Assurez-vous d'activer le mode développeur et d'autoriser les extensions provenant d'autres magasins lors du test de vos propres extensions. ### Processus d'installation d'extensions en développement Lorsque vous développez et testez vos propres extensions, suivez ce flux de travail : ```mermaid flowchart TD A[Écrire le code] --> B[Construire l'extension] B --> C{Première installation ?} C -->|Oui| D[Charger non empaqueté] C -->|Non| E[Recharger l'extension] D --> F[Tester la fonctionnalité] E --> F F --> G{Fonctionne correctement ?} G -->|Non| H[Déboguer les problèmes] G -->|Oui| I[Prêt pour les utilisateurs] H --> A I --> J[Publier sur le store] style A fill:#e1f5fe style F fill:#e8f5e8 style I fill:#f3e5f5 style J fill:#fff3e0 ``` ```bash # Étape 1 : Construisez votre extension npm run build ``` **Ce que cette commande accomplit :** - **Compile** votre code source en fichiers prêts pour le navigateur - **Regroupe** les modules JavaScript en paquets optimisés - **Génère** les fichiers finaux de l'extension dans le dossier `/dist` - **Prépare** votre extension pour l'installation et le test **Étape 2 : Accédez aux extensions du navigateur** 1. **Ouvrez** la page de gestion des extensions de votre navigateur 2. **Cliquez** sur le bouton "Paramètres et plus" (l'icône `...`) en haut à droite 3. **Sélectionnez** "Extensions" dans le menu déroulant **Étape 3 : Chargez votre extension** - **Pour une nouvelle installation** : choisissez `charger l’extension non empaquetée` et sélectionnez votre dossier `/dist` - **Pour les mises à jour** : cliquez sur `recharger` à côté de votre extension déjà installée - **Pour les tests** : activez le "Mode développeur" pour accéder à des fonctionnalités supplémentaires de débogage ### Installation d'extensions en production > ✅ **Note** : Ces instructions pour le développement s'appliquent spécifiquement aux extensions que vous créez vous-même. Pour installer des extensions publiées, rendez-vous dans les magasins officiels d’extensions de navigateur comme le [Microsoft Edge Add-ons store](https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home). **Comprendre la différence :** - **Installations en développement** vous permettent de tester des extensions non publiées durant le développement - **Installations en magasin** offrent des extensions validées, publiées et mises à jour automatiquement - **Installation par sideload** permet d’installer des extensions hors des magasins officiels (requiert le mode développeur) ## Construire votre extension Empreinte Carbone Nous allons créer une extension de navigateur qui affiche l'empreinte carbone de la consommation énergétique de votre région. Ce projet illustre les concepts essentiels du développement d'extensions tout en créant un outil pratique pour la sensibilisation environnementale. Cette approche suit le principe de "l'apprentissage par la pratique" qui s’est avéré efficace depuis les théories éducatives de John Dewey - combinant compétences techniques avec des applications concrètes et significatives. ### Exigences du projet Avant de commencer le développement, rassemblons les ressources nécessaires et les dépendances : **Accès API requis :** - **[Clé API CO2 Signal](https://www.co2signal.com/)** : Entrez votre adresse email pour recevoir votre clé API gratuite - **[Code région](http://api.electricitymap.org/v3/zones)** : Trouvez le code de votre région grâce à [Electricity Map](https://www.electricitymap.org/map) (par exemple, Boston utilise 'US-NEISO') **Outils de développement :** - **[Node.js et NPM](https://www.npmjs.com)** : Outil de gestion de paquets pour installer les dépendances du projet - **[Code de départ](../../../../5-browser-extension/start)** : Téléchargez le dossier `start` pour commencer le développement ✅ **En savoir plus** : Améliorez vos compétences en gestion de paquets avec ce [module Learn complet](https://docs.microsoft.com/learn/modules/create-nodejs-project-dependencies/?WT.mc_id=academic-77807-sagibbon) ### Comprendre la structure du projet Comprendre la structure du projet aide à organiser le travail de développement efficacement. Comme la Bibliothèque d'Alexandrie était organisée pour un accès facile au savoir, une base de code bien structurée rend le développement plus efficace : ``` 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 ``` **Ce que chaque fichier accomplit :** - **`manifest.json`** : **Définit** les métadonnées, permissions et points d'entrée de l'extension - **`index.html`** : **Crée** l'interface utilisateur visible quand les utilisateurs cliquent sur votre extension - **`background.js`** : **Gère** les tâches en arrière-plan et les écouteurs d'événements du navigateur - **`main.js`** : **Contient** le JavaScript final regroupé après le processus de build - **`src/index.js`** : **Contient** le code principal de développement qui sera compilé en `main.js` > 💡 **Conseil d'organisation** : Stockez votre clé API et le code région dans une note sécurisée pour y accéder facilement pendant le développement. Vous aurez besoin de ces valeurs pour tester la fonctionnalité de l'extension. ✅ **Note de sécurité** : Ne jamais commettre de clés API ou d’identifiants sensibles dans votre dépôt de code. Nous vous montrerons comment les gérer en toute sécurité dans les étapes suivantes. ## Création de l'interface de l'extension Nous allons maintenant construire les composants de l'interface utilisateur. L'extension utilise une approche à deux écrans : un écran de configuration pour la configuration initiale et un écran de résultats pour l'affichage des données. Cela suit le principe de divulgation progressive utilisé dans la conception d'interface depuis les débuts de l'informatique - révéler les informations et options dans une séquence logique pour éviter de surcharger les utilisateurs. ### Vue d'ensemble des vues de l'extension **Vue de configuration** - Configuration utilisateur initiale :  **Vue des résultats** - Affichage des données d'empreinte carbone :  ### Création du formulaire de configuration Le formulaire de configuration recueille les données de configuration utilisateur lors de la première utilisation. Une fois configurées, ces informations sont conservées dans le stockage du navigateur pour les sessions futures. Dans le fichier `/dist/index.html`, ajoutez cette structure de formulaire : ```html
``` **Ce que ce formulaire accomplit :** - **Crée** une structure de formulaire sémantique avec des labels appropriés et des associations d’éléments - **Active** l'autocomplétion du navigateur pour une meilleure expérience utilisateur - **Exige** que les deux champs soient remplis avant soumission grâce à l'attribut `required` - **Organise** les champs avec des classes descriptives pour faciliter le style et le ciblage JavaScript - **Fournit** des instructions claires pour les utilisateurs qui configurent l'extension pour la première fois ### Création de l’affichage des résultats Ensuite, créez la zone de résultats qui affichera les données d'empreinte carbone. Ajoutez ce HTML sous le formulaire : ```htmlRegion:
Carbon Usage:
Fossil Fuel Percentage: