2009-11-19 16 views
13

Estoy desarrollando una extensión en Chrome 4 (actualmente 4.0.249.0) que mostrará la reputación del usuario StackOverflow/SuperUser/ServerFault en la barra de estado. Diseñé una página de opciones para obtener los ID de perfil del usuario y los guardo en localStorage y los leí bien en la extensión. Todo funciona genial
El problema es que no puedo encontrar una forma (programática) de actualizar la extensión al guardar las opciones. Intenté llamar al location.reload(); desde la propia página de la extensión haciendo clic con el botón derecho, sin éxito. Perseguí más lejos y intentado buscar en qué página de Chrome chrome://extensions/ hace para recargar una extensión, y encontré este código:¿Cómo actualizo/vuelvo a cargar una extensión de Chrome?

/** 
* Handles a 'reload' button getting clicked. 
*/ 
function handleReloadExtension(node) { 
    // Tell the C++ ExtensionDOMHandler to reload the extension. 
    chrome.send('reload', [node.extensionId]); 
} 

copia este código a mi controlador de eventos no ayudó (y sí, he intentado sustituir [node.extensionId] con el código real). ¿Puede alguien ayudarme a hacer esto de la manera correcta, o señalarme un código de una extensión que hace esto correctamente? Una vez hecho esto, pondré la extensión y su fuente en mi blog.

Respuesta

5

La función chrome.send no es accesible por el código javascript de su extensión, páginas como la página newtab, el historial y la página de extensiones lo utilizan para comunicarse con el código del controlador C++ para esas páginas.

Puede enviar actualizaciones de su extensión a los usuarios que la tengan instalada, esto se describe here. La aplicación del usuario se actualizará una vez que se active el intervalo de actualización automática o cuando reinicien el navegador. Sin embargo, no puede volver a cargar la extensión de un usuario mediante programación. Creo que eso sería un riesgo de seguridad.

+0

Gracias Pierre. Resolvió mi problema alertando al usuario para que haga clic en mi extensión, lo que causa un redibujado. –

+5

esta pregunta es un poco antigua, pero ahora puede desencadenar recargas de extensiones si tiene acceso al [API de administración de extensiones] (http://code.google.com/chrome/extensions/management.html) – gengkev

+0

riesgo de seguridad? obtenemos una experiencia de desarrollador pobre en su lugar. – bartek

2

window.location.reload() funciona para mí

estoy utilizando 6.x de cromo por lo que podría ser fijado en la versión nueva

+0

¿dónde pusiste esto? – knoopx

+3

Lo he usado dentro de mi background.js. Pero también puede usarlo desde sus vistas: chrome.extension.getBackgroundPage(). Window.location.reload() – Marek

+0

La página de fondo es una "página" después de todo. – RayfenWindspear

31

Ahora, la forma más sencilla de hacer extensión a recarga en sí es llamar al chrome.runtime.reload(). Esta función no necesita ningún permiso en el manifiesto. Para , vuelva a cargar otra extensión use chrome.management.setEnabled(). Requiere "permisos": ["gestión"] en manifiesto.

+0

esto debe aceptarse respuesta – ALTN

+0

aceptado respuesta! – NikosKeyz

3

Acabo de tener este mismo problema con an extension.

Resulta que puede escuchar los cambios de almacenamiento dentro de background.js usando chrome.storage.onChanged y tiene que realizar la lógica de actualización.

Por ejemplo:

// Perform a reload any time the user clicks "Save" 
chrome.storage.onChanged.addListener(function(changes, namespace) { 
    chrome.storage.sync.get({ 
    profileId: 0 
    }, function(items) { 

    // Update status bar text here 

    }); 
}); 

También puede recargar partes de su extensión de esta manera tomando el parámetro changes en cuenta. chrome.runtime.reload() puede ser más fácil, pero esto tiene menos sobrecarga.

Cuestiones relacionadas