2009-11-19 20 views
13

Sto sviluppando un'estensione in Chrome 4 (attualmente 4.0.249.0) che mostrerà la reputazione StackOverflow/SuperUser/ServerFault dell'utente nella barra di stato. Ho progettato una pagina delle opzioni per ottenere gli ID del profilo dell'utente e li salvo su localStorage e li leggo bene nell'estensione. Funziona tutto alla grande.
Il problema è che non riesco a trovare un modo (programmatico) per aggiornare l'estensione al salvataggio delle opzioni. Ho provato a chiamare location.reload(); dalla pagina di estensione stessa facendo clic destro su di esso - inutilmente. Ho perseguito ulteriormente e provato a guardare a ciò che la pagina di Chrome chrome://extensions/ fa per ricaricare una proroga, e ho trovato questo codice:Come posso aggiornare/ricaricare un Chrome Extension?

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

Copia questo codice al mio gestore di eventi non ha aiutato (e sì, ho provato a sostituire [node.extensionId] con la codice effettivo). Qualcuno può aiutarmi a farlo nel modo giusto, o indicarmi un codice di un'estensione che lo faccia correttamente? Una volta fatto, metterò l'estensione e la sua fonte sul mio blog.

risposta

5

La funzione chrome.send non è accessibile dal codice javascript della tua estensione, pagine come la pagina newtab, la cronologia e la pagina delle estensioni la usano per comunicare con il codice del controller C++ per quelle pagine.

È possibile inviare aggiornamenti dell'estensione agli utenti che lo hanno installato, questo è descritto here. L'applicazione dell'utente verrà aggiornata una volta raggiunto l'intervallo di aggiornamento automatico o quando si riavvia il browser. Tuttavia, non è possibile ricaricare l'estensione di un utente a livello di programmazione. Penso che sarebbe un rischio per la sicurezza.

+0

Grazie Pierre. Risolto il mio problema avvisando l'utente di fare clic sulla mia estensione, che causa un ridisegno. –

+5

questa domanda è un po 'vecchia, ma ora puoi attivare il ricaricamento delle estensioni se hai accesso al [sicurezza gestione API] (http://code.google.com/chrome/extensions/management.html) – gengkev

+0

rischi per la sicurezza? al contrario, otteniamo una scarsa esperienza di sviluppo. – bartek

2

window.location.reload() funziona per me

Sto usando il cromo 6.x quindi potrebbe essere fissato in versione più recente

+0

dove l'hai messo? – knoopx

+3

L'ho usato nel mio background.js. Ma puoi usarlo anche dalle tue visualizzazioni: chrome.extension.getBackgroundPage(). Window.location.reload() – Marek

+0

La pagina di sfondo è una "pagina" dopotutto. – RayfenWindspear

31

Ora il modo più semplice per fare estensione a ricaricarsi è chiamare chrome.runtime.reload(). Questa funzione non ha bisogno di permessi in manifest. Per ricaricare un'altra estensione utilizzare chrome.management.setEnabled(). Sono richieste le "autorizzazioni" : ["gestione"] in manifest.

+0

questo dovrebbe essere accettato risposta – ALTN

+0

risposta accettata! – NikosKeyz

3

Ho appena avuto lo stesso problema con an extension.

Risulta che è possibile ascoltare le modifiche di memoria entro background.js utilizzando chrome.storage.onChanged e che eseguono la logica di aggiornamento.

Ad esempio:

// 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 

    }); 
}); 

Si potrebbe anche ricaricare parti del proprio interno in questo modo prendendo il parametro changes in considerazione. chrome.runtime.reload() potrebbe essere più semplice, ma questo ha meno spese generali.

Problemi correlati