2010-09-15 7 views
14

Digamos que tengo un archivo JSON almacenado dentro de mi extensión llamado settings.json. Puedo obtener la dirección URL del archivo usando:Cargando un activo almacenado en una extensión de cromo

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

Pero ahora que tengo la URL, ¿cómo puedo realmente cargar el contenido de ese archivo para que pueda JSON.parse y usarlo? La razón por la que hago esto es porque hay un componente de servidor, y quiero facilitar la implementación y prueba en varios servidores (desarrollo, puesta en escena, producción, etc.) Alternativamente, si hay una forma de agregar atributos personalizados al manifiesto. json y acceder a ellos, eso también funcionaría.

Respuesta

24

Si usted hace sus setting.js ven como:

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

continuación, sólo puede incluirlo en una página de fondo y la configuración de uso de variables:

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

Si usted quiere tener JSON pura en su archivo sin asignarlo a ninguna variable, entonces puede cargarlo usando XMLHttpRequest:

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

o si se incluye jQuery en su proyecto:

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

(por cierto usando chrome.extension.getURL sólo es necesario si se accede a un archivo de un script de contenido, de lo contrario sólo se puede usar ruta relativa /config_resources/config.json)

+1

Puedo terminar haciendo su primera sugerencia. Con el segundo, obtengo el siguiente error (desde dentro de un script de contenido): XMLHttpRequest no puede cargar chrome-extension: // /settings.json. Las solicitudes de origen cruzadas solo son compatibles con HTTP. Error no detectado: NETWORK_ERR: XMLHttpRequest Exception 101 – Evan

+0

@Evan Ok, entonces estaba equivocado sobre el script de contenido, lo siento. Si lo necesita en una secuencia de comandos de contenido, puede enviar una solicitud a la página de fondo utilizando 'chrome.extension.sendRequest' y solicitarle que la configure (en cualquier caso, deberá enviar una solicitud, incluso con el primer método). – serg

2

que pueda verifique que la solicitud del recurso desde un XHR en la página de fondo funciona como se describió anteriormente. Solo asegúrese de agregar "self" a la parte connect-src de su content_security_policy.

+0

También se debe considerar otro punto: web_accessible_resources https://stackoverflow.com/a/14236129/742884 –

Cuestiones relacionadas