Comment une extension peut-elle savoir qu'elle est exécutée pour la première fois ou vient d'être mise à jour, afin que l'extension puisse effectuer certaines actions spécifiques? (par exemple ouvrir une page d'aide ou mettre à jour les paramètres)
Comment une extension peut-elle savoir qu'elle est exécutée pour la première fois ou vient d'être mise à jour, afin que l'extension puisse effectuer certaines actions spécifiques? (par exemple ouvrir une page d'aide ou mettre à jour les paramètres)
Réponses:
Dans les nouvelles versions de Chrome (depuis Chrome 22), vous pouvez utiliser l' chrome.runtime.onInstalled
événement, qui est beaucoup plus propre.
Exemple:
// 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 + "!");
}
});
Réponse mise à jour pour refléter la v3 du manifeste:
Chromium dispose désormais d'un ensemble d'API chrome.runtime , qui vous permet de récupérer la version de l'extension.
Pour obtenir la version actuelle:
chrome.runtime.getManifest().version
Pour écouter lorsque l'extension a été installée pour la première fois, lorsque l'extension est mise à jour vers une nouvelle version et lorsque Chromium est mis à jour vers une nouvelle version, vous pouvez utiliser l' onInstalled
événement.
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;
}
})
C'est tout!
Ancienne réponse, avant 2011
Si vous souhaitez vérifier si l'extension a été installée ou mise à jour, vous pouvez faire quelque chose comme ceci:
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'
... il vérifie typeof prevVersion == 'undefined'
. Il est beaucoup plus robuste à utiliser typeof
lors de la vérification si une variable n'est pas définie ... voyez ici pour savoir pourquoi: stackoverflow.com/a/3550319/130691
Heureusement, il y a maintenant des événements pour cela (depuis la version 22 de Chrome et 25 pour les événements de mise à jour).
Pour un événement installé:
chrome.runtime.onInstalled.addListener(function() {...});
Pour un événement OnUpdateAvailable:
chrome.runtime.onUpdateAvailable.addListener(function() {...});
Un extrait important sur OnUpdate Disponible dans la documentation du développeur dit:
Déclenché lorsqu'une mise à jour est disponible, mais n'est pas installée immédiatement car l'application est en cours d'exécution. Si vous ne faites rien, la mise à jour sera installée la prochaine fois que la page d'arrière-plan sera déchargée, si vous voulez qu'elle soit installée plus tôt, vous pouvez appeler explicitement chrome.runtime.reload ().
Facile. Lorsque l'extension s'exécute pour la première fois, le localStorage
est vide. Lors de la première exécution, vous pouvez y écrire un indicateur pour marquer toutes les exécutions consécutives comme non premières.
Exemple, dans 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!');
EDIT: Pour vérifier si l'extension vient d'être mise à jour, stockez la version au lieu d'un simple indicateur lors de la première exécution, puis lorsque la version actuelle de l'extension (récupérez-la en XmlHttpRequest
utilisant le manifeste) ne correspond pas à celle stockée dans localStorage
, l'extension a été mis à jour.
localStorage
trouve en effet dans sa propre fenêtre séparée et n'est pas partagée avec d'autres codes et extensions sur la page, comme @huyz l'a mentionné. Pour les extensions, cependant, ce n'est pas le cas.