2010-09-15 7 views
14

Supponiamo di avere un file JSON archiviato nella mia estensione denominata settings.json. Posso ottenere l'URL del file utilizzando:Caricamento di una risorsa memorizzata in un'estensione di cromo

chrome.extension.getURL("settings.json"); 

Ma ora che ho l'URL, come faccio io in realtà caricare il contenuto di quel file in modo da poter JSON.parse e usarlo? Il motivo per cui sto facendo questo è che esiste un componente server e voglio semplificare la distribuzione e il testing su più server (dev, staging, produzione, ecc.) In alternativa, se c'è un modo per aggiungere attributi personalizzati al manifest. JSON e accedervi, funzionerebbe anche.

risposta

24

Se fate i vostri setting.js assomigliano:

var settings = {"param":value,...}; 

Poi basta è possibile includere in una pagina di sfondo e le impostazioni di utilizzo variabile:

<script src="settings.js"></script> 

Se si desidera avere JSON puro nel file senza assegnarlo a nessuna variabile, quindi è possibile caricarlo utilizzando XMLHttpRequest:

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = handleStateChange; // Implemented elsewhere. 
xhr.open("GET", chrome.extension.getURL('/config_resources/config.json'), true); 
xhr.send(); 

o se hai incluso jQuery nel progetto:

$.getJSON(chrome.extension.getURL('/config_resources/config.json'), function(settings) { 
    //.. 
}); 

(btw usando chrome.extension.getURL è necessaria solo se si accede a un file da uno script di contenuti, altrimenti si può semplicemente utilizzare percorso relativo /config_resources/config.json)

+1

Potrei finire per fare il tuo primo suggerimento. Con il secondo, ottengo il seguente errore (all'interno di uno script di contenuto): XMLHttpRequest non può caricare chrome-extension: // /settings.json. Le richieste di origine incrociata sono supportate solo per HTTP. Errore non rilevato: NETWORK_ERR: XMLHttpRequest Eccezione 101 – Evan

+0

@Evan Ok, ho sbagliato nello script del contenuto, mi dispiace. Se ti serve in uno script di contenuto puoi inviare una richiesta alla pagina di sfondo usando 'chrome.extension.sendRequest' e chiedergli di ottenere le impostazioni per te (dovrai comunque inviare una richiesta, anche con il primo metodo). – serg

2

posso verificare che la richiesta della risorsa da un XHR nella pagina di sfondo funzioni come descritto in precedenza. Assicurati di aggiungere "self" alla porzione connect-src del tuo content_security_policy.

+0

Un altro punto dovrebbe essere preso in considerazione: web_accessible_resources https://stackoverflow.com/a/14236129/742884 –

Problemi correlati