Come può un'estensione scoprire che è in esecuzione per la prima volta o è stata appena aggiornata, in modo che l'estensione possa eseguire alcune azioni specifiche? (es. apri una pagina della guida o aggiorna le impostazioni)
Come può un'estensione scoprire che è in esecuzione per la prima volta o è stata appena aggiornata, in modo che l'estensione possa eseguire alcune azioni specifiche? (es. apri una pagina della guida o aggiorna le impostazioni)
Risposte:
Nelle versioni più recenti di Chrome (a partire da Chrome 22), puoi utilizzare l' chrome.runtime.onInstalled
evento, che è molto più pulito.
Esempio:
// Check whether new version is installed
chrome.runtime.onInstalled.addListener(function(details){
if(details.reason == "install"){
console.log("This is a first install!");
}else if(details.reason == "update"){
var thisVersion = chrome.runtime.getManifest().version;
console.log("Updated from " + details.previousVersion + " to " + thisVersion + "!");
}
});
Risposta aggiornata per riflettere la v3 di manifest:
Chromium ora dispone di un set di API chrome.runtime , che ti consentono di recuperare la versione dell'estensione.
Per ottenere la versione corrente:
chrome.runtime.getManifest().version
Per ascoltare quando l'estensione è stata installata per la prima volta, quando l'estensione viene aggiornata a una nuova versione e quando Chromium viene aggiornato a una nuova versione, puoi utilizzare l' onInstalled
evento.
chrome.runtime.onInstalled.addListener((details) => {
const currentVersion = chrome.runtime.getManifest().version
const previousVersion = details.previousVersion
const reason = details.reason
console.log('Previous Version: ${previousVersion }')
console.log('Current Version: ${currentVersion }')
switch (reason) {
case 'install':
console.log('New User installed the extension.')
break;
case 'update':
console.log('User has updated their extension.')
break;
case 'chrome_update':
case 'shared_module_update':
default:
console.log('Other install events within the browser')
break;
}
})
È tutto!
Vecchia risposta, prima del 2011
Se vuoi controllare se l'estensione è stata installata o aggiornata, puoi fare qualcosa del genere:
function onInstall() {
console.log("Extension Installed");
}
function onUpdate() {
console.log("Extension Updated");
}
function getVersion() {
var details = chrome.app.getDetails();
return details.version;
}
// Check if the version has changed.
var currVersion = getVersion();
var prevVersion = localStorage['version']
if (currVersion != prevVersion) {
// Check if we just installed this extension.
if (typeof prevVersion == 'undefined') {
onInstall();
} else {
onUpdate();
}
localStorage['version'] = currVersion;
}
prevVersion == 'undefined'
... lui sta controllando typeof prevVersion == 'undefined'
. E 'molto più robusto da utilizzare typeof
durante il controllo se non è definita una variabile ... vedi qui per imparare perché: stackoverflow.com/a/3550319/130691
Fortunatamente, ora ci sono eventi per questo (dalla versione 22 di Chrome e 25 per gli eventi di aggiornamento).
Per un evento installato:
chrome.runtime.onInstalled.addListener(function() {...});
Per un evento OnUpdateAvailable:
chrome.runtime.onUpdateAvailable.addListener(function() {...});
Un importante estratto su OnUpdateAvailable dai documenti per sviluppatori dice:
Attivato quando è disponibile un aggiornamento, ma non viene installato immediatamente perché l'app è attualmente in esecuzione. Se non fai nulla, l'aggiornamento verrà installato la prossima volta che la pagina in background viene scaricata, se vuoi che venga installato prima puoi chiamare esplicitamente chrome.runtime.reload ().
Semplice. Quando l'estensione viene eseguita per la prima volta, localStorage
è vuoto. Alla prima esecuzione, è possibile scrivere una bandiera lì per contrassegnare tutte le corse conseguenti come non prime.
Esempio, in background.htm:
var first_run = false;
if (!localStorage['ran_before']) {
first_run = true;
localStorage['ran_before'] = '1';
}
if (first_run) alert('This is the first run!');
MODIFICA: per verificare se l'estensione è stata appena aggiornata, memorizzare la versione invece di un semplice flag alla prima esecuzione, quindi quando la versione dell'estensione corrente (ottenerla XmlHttpRequest
inserendo il manifest) non è uguale a quella memorizzata localStorage
, l'estensione è stato aggiornato.
localStorage
è effettivamente nella sua finestra separata e non condivisa con altro codice ed estensioni sulla pagina come menzionato da @huyz. Per le estensioni, tuttavia, questo non è il caso.