2010-05-04 22 views
28

Sto provando le mie mani con una semplice estensione di Chrome, ma sto incontrando un problema con la fornitura di un valore per l'array matches nel mio content_scripts.Chrome Extension Manifest 'Corrispondenze'

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

Quando provo a caricare questa estensione in Chrome, ho il seguente messaggio:

Impossibile caricare l'estensione da 'C: \ Users \ foo Desktop \ Extensions \ bar \'.
Valore non valido per "content_scripts".

Non riesco a vedere cosa sia "non valido" sul mio valore. Quello che sto cercando di fare è abbinare ogni URL, quindi la mia estensione può manipolare il DOM (tramite javascript entro scripts.js) di qualsiasi pagina su cui viene eseguita. Mi sto perdendo qualcosa, sto sbagliando tutto questo o cosa?

aggiornamento

Dopo aver postato questa domanda, ho notato che l'esempio di Google era leggermente diverso dal mio, così ho modificato il mio codice un po 'a riflettere il loro sintassi:

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

Stando Ho ancora ricevuto il seguente errore quando provo a caricare la mia estensione:

Impossibile caricare l'estensione da 'C: \ Users \ foo \ Desktop \ Ex tensioni \ bar'.
Valore non valido per 'content_scripts [0] .matches [0]'.

+0

Stavo ricevendo lo stesso errore ma non ho scritto la chiave "corrisponde". dove vedo la documentazione dello sviluppatore di Chrome che è richiesta durante la creazione di 'content_scripts' – diEcho

risposta

45

È necessario circondare il valore del campo content_scripts tra parentesi quadre:

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

(si veda la Chrome Docs per maggiori informazioni)

Per inciso, utilizzando http://*/* sarebbe un match migliore per tutti urls (vedere lo docs), aggiungendo https://*/* se è anche necessario abbinarli.

Edit:

Dopo la modifica, l'errore che si sta ottenendo è causa del modello partita di essere non corretta.

+0

Ho visto il pattern' http: // */* ', ma ero preoccupato che questo richiedesse che gli URL avessero un'/'dopo il' http: // 'per far funzionare la mia estensione. È sbagliato? – Aristotle

+0

La pagina dei documenti sulla corrispondenza dei modelli (http://code.google.com/chrome/extensions/match_patterns.html) la spiega in dettaglio. Tutte le estensioni che ho visto usano il pattern 'http: // */*' senza problemi. – adrianbanks

+0

Sì. Ho visto questa pagina pochi istanti prima di porre la mia domanda. Ma il loro esempio mostra 'http: // */*' come corrispondente a 'http: // www.google.com /' che mi ha indotto a credere che un url debba avere una barra in avanti dopo quelli associati a 'http: // 'per invocare la mia logica di estensione. – Aristotle

34

Se si desidera far corrispondere ogni URL, quindi Google ha un modello speciale solo per questo scopo: <all_urls>

Esempio utilizzo:

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

Vai a questa pagina per maggiori informazioni: https://developer.chrome.com/extensions/match_patterns

+2

Molto forte, non lo sapevo. Tuttavia, per chi cerca la documentazione pertinente, il link è in realtà: http://code.google.com/chrome/extensions/match_patterns.html – npdoty

+2

Tutti i link a code.google.com nella risposta scelta e tutti i commenti prima di questo sono rotti seguendo un reorg del sito. Ho risolto la risposta scelta con link funzionanti. – ack

2

Per molti che stanno ottenendo errori:

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

o

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

Cercando la compilazione, o creando, il campo le partite con il vostro URL specifiche necessarie. Se si desidera utilizzare tutti gli URL, quindi utilizzare il tag <all_urls> come di seguito.

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

file elencati nella matrice "js" hanno il loro percorso relativo a voi app. In altre parole, la posizione di "manifest.json" è la directory principale.

Nota: jquery.js è un file nella directory del mio progetto e dovresti sostituirlo con qualsiasi file di script desideri.

Problemi correlati