2010-05-04 6 views
28

Je m'essaie à une simple extension Chrome, mais je rencontre un problème avec la fourniture d'une valeur pour le tableau matches dans mon content_scripts.Manifeste d'extension 'Matches'

{ 
    "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 je tente de charger cette extension dans Chrome, je reçois le message suivant:

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

Je ne vois pas ce qui est "invalide" à propos de ma valeur. Ce que j'essaie de faire est de faire correspondre chaque URL, afin que mon extension puisse manipuler le DOM (via javascript au sein de scripts.js) de n'importe quelle page sur laquelle il est exécuté. Est-ce que j'ai raté quelque chose, tout ce qui va mal, ou quoi?

mise à jour

Après avoir affiché cette question, j'ai remarqué que l'exemple de Google était légèrement différente de la mienne, donc je modifié mon code afin de refléter leur syntaxe:

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

Cela étant dit, je reçois toujours l'erreur suivante en essayant de charger mon extension:

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

+0

Je recevais la même erreur mais je n'ai pas écrit la clé '" matches "'. où est-ce que je vois la documentation du développeur chrome qui est obligatoire lors de la création de 'content_scripts' – diEcho

Répondre

45

Vous devez entourer la valeur du champ content_scripts entre crochets:

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

(voir la Chrome Docs pour plus d'infos)

Soit dit en passant, en utilisant http://*/* serait une meilleure adéquation pour tous urls (voir le docs), en ajoutant https://*/* si vous devez également faire correspondre ceux-ci.

Edit:

Après votre édition, l'erreur que vous obtenez est en raison du motif de correspondance étant incorrect.

+0

J'ai vu le modèle' http: // */* ', mais je craignais que cela nécessite que les URLs aient un'/'après le' http: // 'pour que mon extension fonctionne. Est-ce incorrect? – Aristotle

+0

La page de documentation sur l'appariement de modèles (http://code.google.com/chrome/extensions/match_patterns.html) l'explique en détail. Toutes les extensions que j'ai vues utilisent le modèle 'http: // */*' sans problème. – adrianbanks

+0

Oui. J'ai vu cette page quelques instants avant de poser ma question. Mais leur exemple montre que http: // */* 'correspond à' http: // www.google.com/', ce qui m'a fait croire qu'une URL doit avoir une barre oblique après celles associées à' http: // 'afin d'invoquer ma logique d'extension. – Aristotle

34

Si vous voulez faire correspondre chaque URL, Google a un modèle spécial pour cette fin: <all_urls>

Exemple d'utilisation:

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

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

+2

Très cool, je ne savais pas à ce sujet. Pour ceux qui recherchent la documentation pertinente, le lien est en fait: http://code.google.com/chrome/extensions/match_patterns.html – npdoty

+2

Tous les liens vers code.google.com dans la réponse choisie et tous les commentaires avant celui-ci sont cassés suite à un reorg du site. J'ai corrigé la réponse choisie elle-même avec des liens de travail. – ack

2

Pour ceux qui reçoivent des erreurs impliquant:

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

ou

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

Essayer de remplir ou créer, le champ correspond à 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 par rapport à votre application. En d'autres termes, l'emplacement de "manifest.json" est votre répertoire racine.

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