web-dev-qa-db-fra.com

Manifestations d'extension chromées 'Correspondances'

J'essaie d'utiliser une simple extension Chrome, mais je ne parviens pas à fournir une valeur pour le tableau matches dans mon content_scripts.

{
  "name": "My Extension",
  "version": "1.0",
  "description": "My Extension Experiment",
  "browser_action": {
    "default_icon": "icon.png",
    "default_title": "Ext",
    "default_popup": "popup.html"
  },
  "content_scripts": {
    "matches": ["http://*"],
    "js": ["scripts.js"]
  }
}

Lorsque j'essaie de charger cette extension dans Chrome, le message suivant s'affiche:

Impossible de charger l'extension à partir de 'C:\Users\foo\Desktop\Extensions\bar'.
Valeur non valide pour 'content_scripts'.

Je ne peux pas voir ce qui est "invalide" à propos de ma valeur cependant. Ce que j'essaie de faire, c'est de faire correspondre toutes les URL, afin que mon extension puisse manipuler le DOM (via javascript dans scripts.js) de toute page sur laquelle il est exécuté. Est-ce que je rate quelque chose, que je me trompe ou quoi?

mettre à jour

Après avoir posté cette question, j'ai remarqué que l'exemple de Google était légèrement différent du mien. J'ai donc modifié un peu mon code pour refléter leur syntaxe:

"content_scripts": [{
  "matches": ["http://*"],
  "js": ["scripts.js"]
}]

Cela étant dit, j'obtiens toujours l'erreur suivante lorsque j'essaie de charger mon extension:

Impossible de charger l'extension à partir de 'C:\Users\foo\Desktop\Extensions\bar'.
Valeur non valide pour 'content_scripts [0] .matches [0]'.

35
Aristotle

Vous devez entourer la valeur du champ content_scripts entre crochets:

"content_scripts": [ {
  "matches": ["http://*"],
  "js": ["scripts.js"]
} ]

(voir le Chrome Docs pour plus d'informations)

Incidemment, utiliser http://*/* conviendrait mieux pour toutes les URL (voir le docs ), en ajoutant https://*/* si vous devez également les faire correspondre.

Modifier:

Suite à votre modification, l'erreur que vous obtenez est due au fait que le modèle de correspondance est incorrect.

55
adrianbanks

Si vous souhaitez faire correspondre toutes les URL, Google utilise un modèle spécial à cette fin: <all_urls>

Exemple d'utilisation:

"matches": ["<all_urls>"],

Voir cette page pour plus d’informations: https://developer.chrome.com/extensions/match_patterns

43
thdoan

Pour beaucoup de ceux qui obtiennent des erreurs impliquant:

'content_scripts[0].matches' is missing or invalid.

ou

'content_scripts[0].matches[0]': Empty path.

Essayez de remplir ou de créer, le champ de correspondance avec votre URL spécifique nécessaire . Si vous souhaitez utiliser toutes les URL, utilisez la balise <all_urls> comme ci-dessous.

"content_scripts": [
        {
            "matches": ["<all_urls>"],
            "js": [ "jquery.js" ]
        }
    ]

Les fichiers répertoriés dans le tableau "js" ont leur chemin relatif à votre application. .__ En d'autres termes, l'emplacement de "manifest.json" est votre répertoire racine.

Remarque: jquery.js est un fichier situé dans le répertoire de mon projet et vous devez le remplacer par le fichier de script souhaité.

2
Anselm

Tout modèle de correspondance doit avoir la structure suivante [schéma] : // [hôte] [chemin]

  1. scheme est '*' | 'http' | 'https' | 'fichier' | 'ftp'
  2. Host est '' | '.' (n'importe quel caractère sauf '/' et '*') +
  3. path est '/' (tous les caractères)

Pour faire correspondre les URL HTTP/S et FILE, utilisez: 

 "matches": [
    "*://*/*",
    "file://*/*"
  ],

Réf.: https://developer.chrome.com/apps/match_patterns

À propos, pour autoriser l'accès aux fichiers locaux - ajoutez l'autorisation:

"permissions": [
   "file://*/*"
]

Ou approuvez l'accès au fichier sur la page des paramètres d'extension.

0
David D.