2010-05-04 31 views
28

Estoy probando mis manos en una simple extensión de Chrome, pero tengo un problema al proporcionar un valor para la matriz matches en mi content_scripts.Manifiesto de extensión de Chrome 'Coincidencias'

{ 
    "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"] 
    } 
} 

Cuando intento cargar esta extensión en Chrome, me sale el siguiente mensaje:

No se pudo cargar la extensión de 'C: \ Users \ foo \ Desktop \ extensiones \ bar.
Valor no válido para 'content_scripts'.

No puedo ver lo que es "no válido" acerca de mi valor. Lo que trato de hacer es hacer coincidir todas las URL, por lo que mi extensión puede manipular el DOM (a través de javascript dentro de scripts.js) de cualquier página en la que se ejecute. ¿Me estoy perdiendo algo, todo esto va mal, o qué?

actualización

Después de la publicación de esta pregunta, me di cuenta de que el ejemplo de Google fue ligeramente diferente a la mía, así que modificó mi código un poco para reflejar su sintaxis:

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

Siendo dicho, sigo recibiendo el siguiente error al intentar cargar mi extensión:

No se pudo cargar la extensión de 'C: \ Users \ foo \ Desktop \ Ex tensiones \ bar '.
Valor no válido para 'content_scripts [0] .matches [0]'.

+0

Recibo el mismo error, pero no he escrito la tecla '" coincidencias ". donde veo la documentación del desarrollador de Chrome que son campo obligatorio al crear 'content_scripts' – diEcho

Respuesta

45

Necesitas rodear el valor del campo content_scripts entre corchetes:

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

(ver la Chrome Docs para obtener más información)

Por cierto, utilizando http://*/* sería un partido mejor para todos urls (vea docs), agregando https://*/* si también necesita coincidir con esos.

Editar:

Después de su edición, el error que está recibiendo es debido al perfil de compatibilidad ser incorrectos.

+0

Vi el patrón' http: // */* ', pero me preocupaba que esto requiriera que las URL tuvieran un'/'después de' http: // 'para que mi extensión se ejecute. ¿Es esto incorrecto? – Aristotle

+0

La página de documentos sobre la coincidencia de patrones (http://code.google.com/chrome/extensions/match_patterns.html) lo explica en detalle. Todas las extensiones que he visto usan el patrón 'http: // */*' sin problema. – adrianbanks

+0

Sí. Vi esta página momentos antes de hacer mi pregunta. Pero su ejemplo muestra 'http: // */*' como coincidente 'http: // www.google.com /' que me hizo creer que una url debe tener una barra diagonal inversa después de las asociadas con 'http: // 'para invocar mi lógica de extensión. – Aristotle

34

Si desea hacer coincidir todas las URL, Google tiene un patrón especial sólo para este propósito: <all_urls>

Ejemplo Uso:

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

Consulte esta página para obtener más información: https://developer.chrome.com/extensions/match_patterns

+2

Muy bien, no sabía de eso. Para aquellos que buscan la documentación relevante, el enlace es en realidad: http://code.google.com/chrome/extensions/match_patterns.html – npdoty

+2

Todos los enlaces a code.google.com en la respuesta elegida y todos los comentarios anteriores a este se rompen después de una reorganización del sitio. He corregido la respuesta elegida con enlaces de trabajo. – ack

2

Para muchos que están recibiendo errores relacionados con:

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

o

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

intentar rellenar o crear , el campo de coincidencias con su URL específica necesaria. Si desea utilizar todas las URL, utilice la etiqueta <all_urls> como se muestra a continuación.

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

Los archivos que figuran en la matriz "js" tienen su ruta relativa a su aplicación. En otras palabras, la ubicación de "manifest.json" es su directorio raíz.

Nota: jquery.js es un archivo en el directorio de mi proyecto y debe reemplazarlo con el archivo de script que desee.

Cuestiones relacionadas