recherche
Maisoninterface Webjs tutorielExtension Chrome - configuration de l'environnement

Je veux des fonctionnalités loufoques dans mon navigateur. Peut-être que je peux l'ajouter avec une simple extension ? Cela n'existe pas, mais l'écrire moi-même devrait être facile, non ?

C'est ce que je pensais il y a quelques jours. Même si je n'avais pas complètement erreur, certaines parties du processus de développement ont pris un peu plus de temps que prévu. Je ne dirai pas difficile, mais plutôt difficile à comprendre à l'aide de la documentation disponible. Bien que la documentation de l'API, les concepts de base, etc. soient assez bien décrits sur Developer.chrome.com, je souhaitais une expérience de développeur spécifique :

  • TypeScript avec saisie appropriée de l'espace de noms Chrome
  • Diviser le code en plusieurs fichiers et importer/exporter ce qui était nécessaire
  • Débogage de mon code avec un simple console.log et/ou un débogueur
  • Autocomplétion dans mon manifest.json
  • Configuration simple, sans aucun bundler et la moitié d'Internet dans mes node_modules
  • Un moyen simple de mettre à jour et de tester l'extension dans le navigateur

De manière meilleure ou pire, j'ai réussi à mettre les choses en place comme je le souhaitais. Dans cet article, je vais expliquer brièvement les concepts généraux des extensions et vous montrer comment j'ai configuré mon environnement de développement. Dans un ou deux prochains articles, je me concentrerai sur les détails de mise en œuvre de ma simple extension page-audio.

TLDR :
Si vous voulez juste le code, voici le dépôt passe-partout :

Chrome extension  - environment setup Vaudou / chrome-extension-passe-partout

Plaque passe-partout d'extension Chrome

Ce référentiel vise à être un point de départ pour développer une extension Chrome.

C'est aussi minimaliste que possible, mais est livré avec préconfiguré :

  • complétion automatique pour manifest.json
  • Transpilation TypeScript du dossier ts vers le répertoire dist
  • types pour l'espace de noms Chrome
  • l'exportation et l'importation fonctionnent correctement (avec le paramètre d'espace de travail VS Code pour un format d'importation automatique correct)
  • exemple manifest.json

Bon codage !


Voir sur GitHub


ℹ️ J'utilise Windows 11, MS Edge, VS Code et npm partout ci-dessous ℹ️


Brève introduction aux extensions

Chrome extension  - environment setup

Commençons par un cours intensif sur les concepts généraux d'extension.

Chaque extension possède un fichier manifest.json qui définit son nom, sa version, les autorisations requises et les fichiers utilisés. Les extensions peuvent fournir des fonctionnalités de plusieurs manières différentes :

  • via popup - la popup d'extension est cette petite fenêtre qui s'ouvre lorsque vous cliquez sur l'icône d'extension dans la barre d'extension,
  • via des scripts de contenu - des scripts injectés directement dans les sites Web et ayant un accès au DOM,
  • via des scripts d'arrière-plan (service worker) - les scripts s'exécutent dans un contexte distinct, indépendant des sites Web ouverts

Il existe d'autres moyens, mais je m'en tiendrai à ces trois-là dans ce guide.

Un autre concept important est la messagerie. Habituellement, nous devons combiner les méthodes ci-dessus, car elles ont toutes des limites différentes. Par exemple, les scripts en arrière-plan ne dépendent pas des onglets ouverts et peuvent être plus utiles pour un état persistant, mais ne peuvent accéder au DOM d'aucun site Web. Par conséquent, nous devrons peut-être obtenir des données à l'échelle de l'extension à partir du script d'arrière-plan, les transmettre à l'aide d'un message à un script de contenu et modifier le site Web à partir de là.

Il peut également être utile de comprendre quelques notions de base sur les autorisations. En bref, certaines API ne fonctionneront pas comme prévu si manifest.json ne spécifie pas les autorisations correctes. Par exemple, si nous ne spécifions pas l'autorisation « onglets », les objets renvoyés par l'API des onglets n'auront pas de champ URL. D'un autre côté, nous ne devrions pas demander trop d'autorisations : si l'extension doit être publique, les utilisateurs pourraient craindre de donner accès à trop de choses.


Créer une extension simple

Chrome extension  - environment setup

Inspiré par https://developer.chrome.com/docs/extensions/get-started/tutorial/hello-world

Commençons par comprendre les concepts fondamentaux de notre flux de travail de développement à l'aide d'une extension extrêmement simple qui affiche simplement du texte dans une fenêtre contextuelle.

Fichiers

Tout d'abord, nous avons besoin d'un fichier manifest.json :

// manifest.json
{
  "name": "Hello World",
  "description": "Shows Hello World text",
  "version": "1.0",
  "manifest_version": 3,
  "action": {
    "default_popup": "hello.html",
    "default_icon": "icon.png"
  }
}

name, description, version et manifest_version sont probablement explicites. action.default_popup est un chemin vers un fichier HTML qui sera rendu en cliquant sur l'icône d'extension. default_icon est un chemin vers l'icône d'extension. Les deux chemins sont relatifs à l’emplacement manifest.json.

Maintenant, ajoutez les fichiers icon.png (par exemple, celui-ci) et hello.html dans le même répertoire que manifest.json.
hello.html peut ressembler à ça :

<!-- hello.html -->
<p>Hello world</p>

Et tout votre répertoire devrait ressembler à ça :

// manifest.json
{
  "name": "Hello World",
  "description": "Shows Hello World text",
  "version": "1.0",
  "manifest_version": 3,
  "action": {
    "default_popup": "hello.html",
    "default_icon": "icon.png"
  }
}

Activation de l'extension

Pour activer votre extension :

  1. Allez sur edge://extensions/
  2. Dans la barre latérale gauche, activez le « Mode développeur »
    • "Autoriser les extensions d'autres magasins" peut également être nécessaire
  3. Au-dessus de la liste des extensions, cliquez sur "Charger décompressé"
  4. Sélectionnez le dossier contenant vos fichiers d'extension
  5. Votre extension doit apparaître dans la liste et son icône dans la barre d'outils des extensions ?

Maintenant, après avoir cliqué sur l'icône, une petite fenêtre contextuelle s'affichera avec le texte "Bonjour tout le monde".

Cela couvre les bases les plus importantes. Passons à quelque chose de plus intéressant.

Chrome extension  - environment setup


Configuration de l'environnement d'extension Page-Audio

Chrome extension  - environment setup

Saisie semi-automatique dans manifest.json

On recommence avec le manifest.json et le répertoire vide.

Ce serait génial d'avoir la saisie semi-automatique lors de l'écriture du fichier manifest.json, n'est-ce pas ? Heureusement, il s'agit d'une norme bien définie et possède un schéma JSON sur https://json.schemastore.org/chrome-manifest. Nous en avons juste besoin sous la clé "$schema" au début de manifest.json :

<!-- hello.html -->
<p>Hello world</p>

et VS Code commence instantanément à nous aider en suggérant des noms de champs et en affichant des avertissements si des champs obligatoires sont manquants. Génial !?

Pour que quelque chose fonctionne pour tester notre configuration, utilisez manifest.json en regardant de cette façon :

.
├── hello.html
├── icon.png
└── manifest.json
  • icônes - c'est juste une façon différente de spécifier les icônes d'extension
  • section d'arrière-plan - spécifie le chemin avec le fichier JS du service worker et son type ; c'est un module car le code utilisera l'exportation et l'importation plus tard

Manuscrit

Utiliser TypeScript... eh bien, nécessite TypeScript. Si vous ne l'avez pas installé, commencez par

// manifest.json
{
    "$schema": "https://json.schemastore.org/chrome-manifest"
}

Configuration de base

Pour organiser les choses, mais pas trop compliqué, je vais conserver les fichiers sources .ts dans le répertoire ts. Ils seront extraits de là par le transpilateur et placés dans le répertoire dist sous forme de fichiers .js.

Ceci est décrit par le .tsconfig suivant :

// manifest.json
{
    "$schema": "https://json.schemastore.org/chrome-manifest",
    "name": "Page Audio",
    "version": "0.0.0.1",
    "manifest_version": 3,
    "icons": {
        "16": "icons/logo16x16.png",
        "32": "icons/logo32x32.png",
        "48": "icons/logo48x48.png",
        "128": "icons/logo128x128.png"
    },
    "background": {
        "service_worker": "dist/background.js",
        "type": "module"
    }
}

Les éléments les plus importants sont compiler.rootDir et compiler.outDir. Les autres champs peuvent avoir des valeurs différentes ou être complètement supprimés (au moins certains d'entre eux).

C'est la configuration de base - placer certains fichiers dans le répertoire ts et exécuter tsc dans le répertoire racine créera un fichier .js correspondant dans dist. Cependant, il nous manque une partie importante : les types pour l'espace de noms Chrome que nous utiliserons. La solution la plus simple est de les ajouter via npm.

Ajout de types de chrome

Créez un package.json vide, juste avec les parenthèses :

// manifest.json
{
  "name": "Hello World",
  "description": "Shows Hello World text",
  "version": "1.0",
  "manifest_version": 3,
  "action": {
    "default_popup": "hello.html",
    "default_icon": "icon.png"
  }
}

et dans la ligne de commande, exécutez :

<!-- hello.html -->
<p>Hello world</p>

Vous pouvez également ajouter des scripts pour exécuter tsc build et en mode montre. Le package.json final devrait ressembler à ceci :

.
├── hello.html
├── icon.png
└── manifest.json

ℹ️ La version des types Chrome pourrait être plus élevée dans votre cas. ℹ️

Après avoir ajouté les types, nous devons en informer TypeScript. Pour ce faire, mettez simplement à jour .tsconfig.json :

// manifest.json
{
    "$schema": "https://json.schemastore.org/chrome-manifest"
}

Pour tester si notre configuration fonctionne correctement :

  1. Dans le dossier ts, créez le fichier background.ts avec le contenu suivant

    // manifest.json
    {
        "$schema": "https://json.schemastore.org/chrome-manifest",
        "name": "Page Audio",
        "version": "0.0.0.1",
        "manifest_version": 3,
        "icons": {
            "16": "icons/logo16x16.png",
            "32": "icons/logo32x32.png",
            "48": "icons/logo48x48.png",
            "128": "icons/logo128x128.png"
        },
        "background": {
            "service_worker": "dist/background.js",
            "type": "module"
        }
    }
    
    
  2. Dans la ligne de commande, exécutez

    npm install -g typescript
    
  3. Vérifiez si le répertoire dist a été créé et si le fichier background.js y est apparu

  4. Modifiez quelque chose dans la chaîne console.log dans le fichier ts/background.ts et enregistrez-le

  5. Vérifiez s'il a automatiquement mis à jour dist/background.js.

Si ça marche, génial ! Nous avons presque tout mis en place ?

Vous pouvez également vérifier si votre structure de répertoires ressemble à celle-ci :

// .tsconfig
{
    "compilerOptions": {
        "target": "ES6",
        "module": "ES6",
        "outDir": "./dist",
        "rootDir": "./ts",
        "strict": true,
    }
}

importer et exporter

Comme je l'ai mentionné, j'aimerais diviser le code en fichiers plus petits. Pour ce faire, l'exportation et l'importation doivent fonctionner correctement.

Une étape dans cette direction consistait à spécifier notre service_worker dans manifest.json comme "type": "module". Cependant, il existe une différence entre TypeScript et JavaScript lorsque vous travaillez avec des modules : alors que TypeScript n'a pas besoin d'extensions de fichier lors de l'importation, JavaScript en a besoin. Ainsi, par exemple, cette importation :

// package.json
{
}

fonctionnera dans TS, mais JS a besoin

npm i -D chrome-types

Il est également important de comprendre que le transpilateur TS ne fait rien sur les chemins d'importation. Et c'est assez "intelligent" pour comprendre que lors de l'importation depuis file.js, il doit également rechercher file.ts.

En combinant tout cela, TS sera également satisfait de l'importation de style JS et utilisera le fichier TS correspondant lors de l'importation à partir de file.js. Ce que nous devons faire est de nous assurer que toutes les importations dans les fichiers TS ont une extension .js. Pour l'automatiser dans VS Code :

  1. Appuyez sur CTRL pour ouvrir les paramètres
  2. Passer à l'onglet "Espace de travail"
  3. Recherchez typescript.preferences.importModuleSpecifierEnding
  4. Réglez-le sur l'option ".js / .ts"

Maintenant, chaque fois que vous importez automatiquement à l'aide de VS Code, il ajoutera .js au nom de fichier ?

Pour tester si tout fonctionne correctement :

  1. Créez un fichier ts/hello.ts avec le contenu suivant

    // package.json
    {
        "scripts": {
            "build": "tsc",
            "watch": "tsc -w"
        },
        "devDependencies": {
            "chrome-types": "^0.1.327"
        }
    }
    
  2. Dans ts/background.ts, supprimez la ligne console.log actuelle et commencez à taper "hello"

  3. VS Code devrait le compléter automatiquement et ajouter l'importation correcte après avoir accepté la suggestion avec Tab

  4. Au final, le fichier devrait ressembler à ceci :

    // manifest.json
    {
      "name": "Hello World",
      "description": "Shows Hello World text",
      "version": "1.0",
      "manifest_version": 3,
      "action": {
        "default_popup": "hello.html",
        "default_icon": "icon.png"
      }
    }
    

Notez que l'importation se termine par l'extension .js. Si vous vérifiez dist/background.js, l'extension est également là et c'est ce qui fait que tout fonctionne correctement.

Pour être sûr que nous sommes au même stade, vous pouvez comparer la structure des répertoires :

<!-- hello.html -->
<p>Hello world</p>

Outils de développement pour les techniciens de service

D'accord, nous avons une expérience de développement décente. Nous avons également ajouté quelques appels console.log... mais où les trouver maintenant ?

Si vous ajoutez console.log dans un script de contenu, vous pouvez simplement ouvrir les outils de développement et ils seront là, car les scripts de contenu fonctionnent dans le même contexte que la page dans laquelle ils sont injectés. Cependant, les console.logs des scripts d'arrière-plan sont un peu plus masqués.

  1. Ouvrez edge://extensions/ et chargez votre extension si vous ne l'avez pas encore fait
  2. Trouvez votre extension dans la liste
  3. Cliquez sur le lien « Service Worker » dans la ligne « Inspecter les vues » :

    Chrome extension  - environment setup

  4. Une nouvelle fenêtre Outils de développement devrait s'ouvrir et vous y verrez les journaux du technicien de service

    • Si vous ne voyez pas les journaux, cliquez sur « Recharger » sous « Inspecter les vues »

Les trois liens en bas de la tuile sont également très importants

  • "Reload" - actualise l'intégralité de l'extension, y compris les modifications apportées à manifest.json ; consultez ce tableau pour comprendre quand un rechargement pourrait être nécessaire
  • "Supprimer" - supprime l'extension
  • "Détails" - affiche plus d'informations sur l'extension, par exemple ses autorisations
  • (facultatif) "Erreurs" - s'il y a des erreurs lors de l'installation du service worker, ce lien apparaîtra et vous amènera à la liste des erreurs

Ouf. Cela a pris un moment, mais, finalement, notre environnement est bien configuré. Désormais, il suffira de

  1. Exécutez npm run watch (si vous l'avez arrêté)
  2. Écrivez notre code dans le répertoire ts
  3. (Facultatif) Rechargez l'extension depuis l'onglet Extensions

Et notre extension sera automatiquement mise à jour ! ⚙️

Si vous avez une idée sur la façon de "Recharger" automatiquement (sans piratage élaboré), faites-le-moi savoir dans les commentaires

Résumé

Chrome extension  - environment setup

Nous avons notre environnement prêt !

  • La saisie semi-automatique fonctionne dans manifest.json, nous n'avons donc pas à deviner quelles sont les valeurs correctes
  • TypeScript nous aide à utiliser correctement l'API Chrome
  • Le code peut être divisé en fichiers logiques plus petits
  • Le code que nous écrivons dans le dossier ts est mis à jour automatiquement
  • Nous savons où trouver les outils de développement pour le service worker et les scripts de contenu

Dans la partie suivante, je décrirai les détails d'implémentation de ma petite extension "Page audio".

Merci d'avoir lu !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Remplacer les caractères de chaîne en javascriptRemplacer les caractères de chaîne en javascriptMar 11, 2025 am 12:07 AM

Explication détaillée de la méthode de remplacement de la chaîne JavaScript et de la FAQ Cet article explorera deux façons de remplacer les caractères de chaîne dans JavaScript: le code JavaScript interne et le HTML interne pour les pages Web. Remplacer la chaîne dans le code JavaScript Le moyen le plus direct consiste à utiliser la méthode Remplace (): str = str.replace ("trouver", "remplacer"); Cette méthode remplace uniquement la première correspondance. Pour remplacer toutes les correspondances, utilisez une expression régulière et ajoutez le drapeau global G: str = str.replace (/ fi

Tutoriel de configuration de l'API de recherche Google personnaliséTutoriel de configuration de l'API de recherche Google personnaliséMar 04, 2025 am 01:06 AM

Ce tutoriel vous montre comment intégrer une API de recherche Google personnalisée dans votre blog ou site Web, offrant une expérience de recherche plus raffinée que les fonctions de recherche de thème WordPress standard. C'est étonnamment facile! Vous pourrez restreindre les recherches à Y

Exemple Couleurs Fichier JSONExemple Couleurs Fichier JSONMar 03, 2025 am 12:35 AM

Cette série d'articles a été réécrite à la mi-2017 avec des informations à jour et de nouveaux exemples. Dans cet exemple JSON, nous examinerons comment nous pouvons stocker des valeurs simples dans un fichier à l'aide du format JSON. En utilisant la notation de paire de valeurs clés, nous pouvons stocker n'importe quel type

10 Highlighters de syntaxe jQuery10 Highlighters de syntaxe jQueryMar 02, 2025 am 12:32 AM

Améliorez votre présentation de code: 10 surligneurs de syntaxe pour les développeurs Partager des extraits de code sur votre site Web ou votre blog est une pratique courante pour les développeurs. Le choix du bon surligneur de syntaxe peut améliorer considérablement la lisibilité et l'attrait visuel. T

Créez vos propres applications Web AjaxCréez vos propres applications Web AjaxMar 09, 2025 am 12:11 AM

Vous voici donc, prêt à tout savoir sur cette chose appelée Ajax. Mais qu'est-ce que c'est exactement? Le terme Ajax fait référence à un regroupement lâche de technologies utilisées pour créer un contenu Web interactif dynamique. Le terme Ajax, inventé à l'origine par Jesse J

8 Superbes plugins de mise en page JQuery Page8 Superbes plugins de mise en page JQuery PageMar 06, 2025 am 12:48 AM

Tirez parti de jQuery pour les dispositions de page Web sans effort: 8 plugins essentiels JQuery simplifie considérablement la mise en page de la page Web. Cet article met en évidence huit puissants plugins jQuery qui rationalisent le processus, particulièrement utile pour la création de sites Web manuels

10 tutoriels JavaScript & jQuery MVC10 tutoriels JavaScript & jQuery MVCMar 02, 2025 am 01:16 AM

Cet article présente une sélection organisée de plus de 10 didacticiels sur les cadres JavaScript et JQuery Model-View-Controller (MVC), parfait pour augmenter vos compétences en développement Web au cours de la nouvelle année. Ces tutoriels couvrent une gamme de sujets, de Foundatio

Qu'est-ce que & # x27; ceci & # x27; en javascript?Qu'est-ce que & # x27; ceci & # x27; en javascript?Mar 04, 2025 am 01:15 AM

Points de base Ceci dans JavaScript fait généralement référence à un objet qui "possède" la méthode, mais cela dépend de la façon dont la fonction est appelée. Lorsqu'il n'y a pas d'objet actuel, cela fait référence à l'objet global. Dans un navigateur Web, il est représenté par Window. Lorsque vous appelez une fonction, cela maintient l'objet global; mais lors de l'appel d'un constructeur d'objets ou de l'une de ses méthodes, cela fait référence à une instance de l'objet. Vous pouvez modifier le contexte de ceci en utilisant des méthodes telles que Call (), Appliquer () et Bind (). Ces méthodes appellent la fonction en utilisant la valeur et les paramètres donnés. JavaScript est un excellent langage de programmation. Il y a quelques années, cette phrase était

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

Dreamweaver Mac

Dreamweaver Mac

Outils de développement Web visuel

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.